thisをshared_ptrで他のクラスに渡したい場合にどうするか。メモ。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
#include <boost/shared_ptr.hpp> #include <boost/enable_shared_from_this.hpp> using namespace boost; #include "Y.h" class X : public enable_shared_from_this<X> { private: Y y_; public: void make_reference(); }; void X::make_reference() { /* Yに自身を渡す*/ y_ = new Y(shared_from_this()); } |
注意点、Y側はshared_ptrからweak_ptrに変換して保持しないと循環参照となりX, Yもdeleteされないことに。また、shared_ptrをコンストラクタで構築すると、コンストラクタを抜けた時に自身が解放されちゃう。
1 2 3 4 5 |
class X { public; X() { shared_ptr<X> x = shared_from_this(); } ///NG } |
参考文献 :