반응형
Effective C++ 항목13
자원 관리에는 객체가 그만!
선요약
1. 자원 누출을 막기 위해, 생성자 안에서 자원을 획득하고 소멸자에서 그것을 해제하는 RAII 객체를 사용하자
2. 항목13에서는 auto_ptr에 대해서 설명하지만, C++ 11 이후로는 auto_ptr을 사용할 수 없게 되었다. 이제는 unique_ptr을 사용하라
unique_ptr
유일하게 하나의 포인터만이 객체를 가리키도록 하고 싶다면 unique_ptr을 사용하라.
std::move 연산자를 통해 소유권을 변경할 수 있다.
shared_ptr
여러 포인터가 객체를 가리키도록 하고 싶으면서, 사용하지 않을 때 메모리 해제가 자동으로 되도록 하고 싶다면 shared_ptr을 사용하라.
참조 카운팅 방식이기 때문에 카운트가 0이 되면 heap에 할당된 메모리가 알아서 해제된다.
위의 두 가지 스마트 포인터는 내부적으로 소멸자 내에서 delete 연산자를 호출한다.
이 때문에 메모리 해제가 제대로 되지 않는다.
배열에 대해서 할당할 때는 처음 선언할 때부터 아래와 같이 선언하라.
std::shared_ptr<int[]> numArr(new int[1000]);
반응형
'Book & Lecture > Effective C++' 카테고리의 다른 글
Effective C++ 항목18 : 인터페이스 설계는 제대로 쓰기엔 쉽게, 엉터리로 쓰기엔 어렵게 하자 (0) | 2023.03.12 |
---|---|
Effective C++ 항목14 : 자원 관리 클래스의 복사 동작에 대해 진지하게 고찰하자 (0) | 2023.02.27 |
Effective C++ 항목12 : 객체의 모든 부분을 빠짐없이 복사하자 (0) | 2023.02.19 |
Effective C++ 항목11 : operator에서는 자기대입에 대한 처리가 빠지지 않도록 하자 (0) | 2023.02.18 |
Effective C++ 항목10: 대입 연산자는 *this의 참조자를 반환하게 하자 (0) | 2023.02.13 |