최신의 c++에서 동적메모리 할당에 raw pointer를 사용하는 것보다는 std::unique_ptr을 사용해야 할 이유는 충분히 많이 있다.

std::unique_ptr의 사용해야 할 이유가 생소한 사람은 “스콧 마이어스의 Effective Modern C++” 부터 읽어보길 추천한다.

여기서는 생각해볼 문제로 2가지 관점에서 std::unique_ptr을 써야 하는 이유를 이야기해보고자 한다.

 

1. 예외로 부터 보호하기

c++에서는 RAII를 활용하는 것이 정말 좋다. 즉, raw pointer보다 std::unique_ptr이 더 좋다.

만약 CQueue::Add 함수가 예외를 던진다면 어떻게 될까?

UseRawPointer(); 함수는 메모리릭이 발생하지만, UseUniquePointer(); 함수는 메모리릭이 발생하지 않는다.

 

2. 잘못 쓰기 어렵게 만들기

예를 들어서 CStream이라는 클래스가 있고, 생성자에서 CBuffer*를 입력해줄 것을 요구한다고 하자.

CBuffer* 를 할당을 해서 넣어주어야 하는 것일까? 그렇다면 해제는 CStream이 하는것인가? 외부에서 따로 해야 하는 것인가?

new를 안해도 되는 것일까?

 

실제로 개발을 하다 보면, 반드시 new를 요구하는 케이스가 있고, 그렇지 않은 케이스가 있다.

개발하면서는 기존에 사용한 코드를 참조하거나, 내부의 구현을 보고 적당히 잘 쓰는게 현실이다.

나같은 경우는 c++에 move 연산자가 추가되면서 부터는 new를 요구하는 곳에서는 std::unique_ptr을 사용하려고 하고 있다.

(인터페이스의 일관성 문제 등도 있고, 협업의 관점도 있고, 이미 진행된 코드에서는 그렇게 하지 못하지만…)