반응형

c++ 25

[C++] 깊은 복사와 얕은 복사

기본 복사 생성자는 멤버 대 멤버를 복사한다. 이러한 방식은 "얕은 복사"라고 한다. 힙 영역의 메모리 공간을 참조할 때 얕은 복사의 문제가 발생한다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 #include #include #pragma warning(disable:4996) using namespace std; class Person { private: char* name; int age; public: Person(const char* myName, int myAge) { int len = strlen(myName) + 1; name = ..

언어/C++ 2022.03.08

[C++] Inner Class (중첩 클래스, Nested Class)

특정 클래스 내부에서만 사용될 클래스를 중첩 클래스라고 한다. 내부에 선언된 클래스는 해당 클래스에서만 사용할 수 있고, 외부에서는 사용하지 못한다. (public으로 선언한 경우에는 접근자체는 가능하다.) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 #include #include using namespace std; class Person { public: string name; class Address { public: string country; string city; int houseNumber; }; Address add; void print() ..

언어/C++ 2022.01.06

[C++] #pragma once와 #ifndef ~ #endif

컴파일시에 C++의 #include는 해당 헤더의 내용이 복사되어 들어오게 된다. 이 때, 같은 내용의 헤더가 두 번 이상 복사될 수 있는데, 이것을 막아주는 게 #pragma once와 #ifndef ~ #endif이다. 차이점은 다음과 같다. #pragma once는 컴파일 동안 단 한 번만 처리를 하므로 더 빠른 컴파일이 가능해진다. 단, 일부 구형 컴파일러에서는 지원이 안 되는 경우도 있다. #ifndef는 if not defined의 약자이다. 정의하지 않았다면 #define 부터 #endif 까지의 코드를 include 한다. #ifndef EXAMPLE_H #define EXAMPLE_H #endif

언어/C++ 2021.12.26

[C++] 스마트 포인터

개념 C++은 C#처럼 Gabage Collecter(GC)가 없다. 따라서 메모리 할당을 따로 하고, 해제 해줘야한다. 예를 들어 new로 할당해준 경우에는, delete로 해제해줘야 한다. 해제해주지 않으면, memory leak(메모리 누수)이 발생하게 되고, 이는 프로그램 오류의 원인이 된다. 스마트 포인터를 사용하면, 사용이 끝난 메모리를 자동으로 해제해 주므로, 이런 오류를 방지할 수 있다. 헤더 파일 : memory 종류 1. unique_ptr 하나의 스마트 포인터만이 특정 객체를 소유할 수 있도록, 객체에 소유권 개념을 도입한 스마트 포인터 이동은 가능하지만, 복사는 불가능하다. 따라서 참조 전달은 가능하지만, 값 전달(복사 생성자)은 불가능. 2. shared_ptr 하나의 특정 객체를..

언어/C++ 2021.12.15

[C++] string 클래스 정리

개요 C++에서 사용되는 string 클래스를 정리한다 목록 length() : 문자열의 길이를 반환한다. size() : 해당 string 객체가 메모리에서 실제 사용하고 있는 크기를 나타낸다. length()와 size()는 언제나 같은 값을 반환하지만, 그 의미에는 차이가 있다. append() : 문자열 끝에 다른 문자열을 추가한다. 문자열1.append(문자열2) : 문자열1의 끝에 문자열2를 추가한다. 문자열1.append(문자열2, 문자열2의 시작 위치, 개수) : 문자열1의 끝에 문자열2의 시작 위치부터 해당 개수만큼 문자열을 추가한다. 문자열.append(개수, 추가할문자) : 추가할 문자를 개수만큼 끝에 추가한다. find() : 특정 문자열을 찾아, 그 시작 위치를 반환한다. 문자열이..

언어/C++ 2021.12.09
반응형