boost::scoped_ptr 를 기억하십니까?
어제 스마트 포인터 관련 글을 썼는데 여기에서 boost::scoped_ptr
는 다루지 않았다.
그건 scoped_ptr
가 반쯤 구현된 unique_ptr
라서. 두 개의 스마트 포인터의 차이는,
scoped_ptr
는 지금의unique_ptr
처럼 오직 1명의 소유자 인 코드를 짤 때 유용하다.unique_ptr
는 move 를 적극적으로 활용해서 만들어진 표준 라이브러리다. (C++11)unique_ptr
는release()
라는 소유권을 포기하는 멤버 함수를 제공한다.
정도다. 그래서 mutable 함수인 release()
만 못쓰게 막으면 되기 때문에 — 즉, const unique_ptr
를 쓰면 되기 때문에, scoped_ptr
의 유용성이 없어진 것.
비슷한 이유로, Google C++ Styleguide도 처음엔 scoped_ptr
좋아요 였다가, C++03 호환성 때문이 아니면 unique_ptr
를 써라 로 바뀌었다.
내 취향으로는 명시적인 release()
멤버 함수가 있다/없다로 구분하는게 더 좋지만 (…), 표준에는 없는 (boost에만 있음) boost::scoped_ptr
를 권하는 건 이젠 어려울 듯…