안전하게 this의 shared_ptr 얻는 방법?

wafe의 이미지

class MyClass
{
public:
  void AddToList(MyClassList &list)
  {
    // 바로 이부분!
    list.push_back(this);
  }
};

typedef boost::shared_ptr<MyClass> MyClassPtr;
typedef std::list<MyClassPtr> MyClassList;

...

MyClassList newList;
MyClassPtr newInst(new MyClass());
newInst->AddToList(newList);

이런 코드가 있을 때 표시해 놓은 부분의 코드를 어떻게 써야할 지 모르겠습니다.

list.push_back(MyClassPtr(this));

라고 쓰면 문법적으로는 맞지만 인스턴스 하나를 가지고 shared_ptr 두 개를 만들게 되어 문제가 생기죠.

좋은 방법이 없을까요?

wafe의 이미지

자문자답이군요. ^^; MyClass가 boost::enable_shared_from_this를 상속받게 하면 되는 것 같습니다.

예제는
http://www.boost.org/libs/smart_ptr/enable_shared_from_this.html
에 있습니다.

Heejoon Lee