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

时间:2013-02-20 23:10:14

标签: c++ templates inheritance c++11 shared-ptr

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

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

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

1 个答案:

答案 0 :(得分: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;

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

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

std::shared_ptr<Base> p = p0;

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