본문 바로가기

프로그래밍/C/C++

c++ 11, 14 unique_ptr

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