8

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

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

これを達成する方法、またはそれに似た方法はありますか?

4

1 に答える 1

13

それは非常に可能です。shared_ptr<Derived>aを a に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);
于 2013-02-20T23:17:51.100 に答える