C++11
-
1. std::unique_ptrModern C++/Smart Pointer 2020. 7. 2. 18:39
C++ 메모리 관리 C++에서 생 포인터(raw pointer)를 관리하기는 쉽지 않다. 자바는 가비지 콜렉터가 이를 수행하지만 C++같은 경우 사용자가 직접 메모리를 관리해야 한다. 잘못된 메모리 관리는 메모리 릭이 발생하거나 더블 프리 문제로 프로그램이 예외를 던지고 프로그램이 종료하기도 한다. 여기서 생 포인터를 사용하기 어려운 이유를 살펴 보기로 하자. struct Data { uint8_t *data_; size_t length_; }; 여기서 data_는 하나의 객체를 가리키는 포인터인지 배열을 가리키는 포인터인지 코드 자체로는 구별할 수 없다. 생성자에는 uint8_t 형 배열 포인터와 해당 배열의 크기를 받는 생성자와 소멸자를 추가해보자. struct Data { Data(const uin..
-
5. C++11 객체 생성 규칙 Rule of FiveModern C++/Move Semantics 2020. 7. 1. 23:55
C++11 이전 컴파일러가 생성하는 특수 멤버 함수 C++11 이전 컴파일러는 기본 생성자(Basic Constructor), 소멸자(Destructor) , 복사 생성자(Copy Constructor), 복사 할당자(Copy Assignment)를 필요한 경우 자동으로 생성한다. 이는 컴파일 도중 해당 연산을 사용하는 코드가 있는 경우 컴파일러에 의해 암묵적으로 public inline으로 자동으로 생성 된다. class Foo { }; Foo f0; //기본 생성자 생성 Foo f1 = f0; //복사 생성자 생성 Foo f1(f0); //Foo f1 = f0 와 동일 Foo f2; Foo f2 = f0; // 할당 연산자 생성 위의 Foo 클래스는 사용자가 아무것도 정의하지 않았지만 컴파일러가 Fo..