#include <memory>
std::unique_ptr<Obj> objPtr = std::make_unique<Obj>();
// scope를 벗어나거나 stack frame이 pop이 될 때 자동으로 delete
std::vector<Obj> objs(3);
// 여러개의 object를 사용할 경우 STL container를 사용.
exclusive ownership : 하나의 object는 하나의 포인터만 가리킬 수 있음.
std::unique_ptr<Obj> objPtr = std::make_unique<Obj>();
Ref count : object를 몇개의 포인터가 가리키고 있는지 추적. Ref count가 0이 되면 object의 destructor 호출된다. use_count() 메소드를 이용하면 확인 가능.
std::shared_ptr<Obj> objPtr = std::make_shared<Obj>();
std::weak_ptr<Obj> wPtr;
{
std::shared_ptr<Obj> sPtr = std::make_shared<Obj>();
wPtr = sPtr;
}
// sPtr이 scope를 벗어나 해제될 때 wPtr도 해제됨.