unique_ptr
unique_ptr<T>
unique_ptr<T[]> -> 쓸일없을듯
unique_ptr은 날포인터랑 거의 비슷 (커스텀삭제자 사용시 제외)
독점적 소유권이다.
이동하면 원본에서 대상포인터로 옮겨진다. (원본은 nullptr)
복사는 허용하지 않는다. (move-only type)
소멸시 자신이 가리키는 자원 파괴 한다.
커스텀삭제자 (custom deleter) 사용 가능
unique_ptr은 shared_ptr로 변환이 쉽고 효율적.
★사용법
1.
class widget{
public:
virtual ~widget(); // custom deleter 사용 하려면 반드시 가상 소멸자로 선언 해야 함.
}
2.
커스텀 삭제자 선언
auto customDel = [](widget* ptr)
{
블라블라~~
delete ptr;
}
3.
사용
func( ... )
{
std::unique_ptr<widget, decltype(customDel)> ptr(nullptr, customDel);
... 블라블라~
return ptr;
}
4.
unique_ptr -> shared_ptr 변환
shared_ptr<widget> sp = make_unique_ptr(...);
★생성 new 보다는 make_unique 사용 하도록! (c++ 14다 ㅜ.ㅜ, make_shared는 c++11임...다행)
'프로그래밍 > C/C++' 카테고리의 다른 글
c++11, 14 weak_ptr (0) | 2017.06.13 |
---|---|
c++ 11, 14 shared_ptr (0) | 2017.06.13 |
c++ 11, 14 (0) | 2017.06.13 |
c++ 11, 14 for, auto (0) | 2016.08.07 |
c++ 11, 14, constexpr (0) | 2016.08.06 |