본문 바로가기
Book & Lecture/Effective C++

Effective C++ 항목13 : 자원 관리에는 객체가 그만!

by studio ODOC 2023. 2. 26.
반응형

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]);
반응형