2011-08-09 4 views
0

だから我々は(擬似コード)を持つ:C++クラスのこのインスタンスのブースト共有ポインタをネストされたクラスオブジェクトに渡す方法はありますか

class A 
{ 
A(shared_ptr parent){} 
} 

class B 
{ 
A *a; 
B() 
{ 
    a = new A(boost::shared_ptr(this)); 
} 
} 

は、それはC++でのshared_ptrでそんなことをすると、実際のC++のコードでそれを行う方法は可能ですか?あなたがenable_shared_from_this必要

答えて

6

#include <memory> 

class B : public std::enable_shared_from_this<B> 
{ 
    A * a; 
public: 
    B() : a(new A(std::shared_from_this())) { } 
}; 

(これはC++ 0xのためであり、ブーストは、同様に動作するはずです)あなたがあなた自身の足を撃つ可能性があるため、ジャストthisから共有ポインタを作る

は注意が必要ですオフ。 enable_shared_from_thisから継承すると、これは簡単になります。

警告:裸のAポインタを使用していると、リソース管理クラスを使用する目的が無効になっているようです。 aをスマートなポインタにしてみませんか?多分unique_ptr

関連する問題