基类的weak_ptr,而shared_ptr是派生类?

Ann*_*inn 7 c++ inheritance templates shared-ptr c++11

我有一个结构来管理从基类派生的对象Entity,但不控制它们的生命周期.我希望这个结构被赋予弱指针,weak_ptr<Entity>以便它可以知道对象是否已在其他地方被破坏.

但是,在共享指针所在的管理结构之外,我希望共享指针更具体shared_ptr<SpecificEntity> (SpecificEntity使用Entity作为基类).

有没有办法实现这个,或类似的东西?

Ker*_* SB 12

这很可能.您可以随时转换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;
Run Code Online (Sandbox Code Playgroud)

或者,更多C++ 11风格:

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

std::shared_ptr<Base> p = p0;

auto q = std::static_pointer_cast<Derived>(p);
Run Code Online (Sandbox Code Playgroud)