2013-02-20 23 views
5

基本クラスEntityから派生したオブジェクトを管理する構造体がありますが、そのライフタイムは制御されません。この構造体にweak_ptr<Entity>のような弱いポインタを与えて、オブジェクトが他の場所で破壊されたかどうかを知ることができるようにしたい。基本クラスのweak_ptrですが、shared_ptrは派生クラスですか?

しかし、共有ポインタが存在する管理構造体の外では、共有ポインタをより具体的なshared_ptr<SpecificEntity>にします(SpecificEntityは基本クラスとしてEntityを使用します)。

これを達成する方法はありますか、それとも何か?

答えて

11

これは非常に可能です。 shared_ptr<Derived>は暗黙的にshared_ptr<Base>に変換できます。逆方向の場合は、std::static_pointer_caststd::dynamic_pointer_castとなります。–となると、元のポインタと所有権を共有する別のタイプの新しいポインタになります。例:

std::shared_ptr<Base> p(new Derived); 

std::shared_ptr<Derived> q = std::static_pointer_cast<Derived>(p); 

std::shared_ptr<Base> r = q; 

あるいは、よりC++ 11-スタイル:

auto p0 = std::make_shared<Derived>(); 

std::shared_ptr<Base> p = p0; 

auto q = std::static_pointer_cast<Derived>(p); 
+0

ああ、私はこれのためにキャストがあった知りませんでした!ありがとうございました! –

関連する問題