我有一个结构来管理从基类Entity
派生的对象,但不控制它们的生命周期。我希望这个结构被赋予像weak_ptr<Entity>
这样的弱指针,以便它可以知道对象是否已在其他地方被破坏。
但是,在共享指针所在的管理结构之外,我希望共享指针更具体shared_ptr<SpecificEntity>
(SpecificEntity使用Entity作为基类)。
有没有办法实现这个,或类似的东西?
答案 0 :(得分:12)
这很有可能。您可以随时隐式地将shared_ptr<Derived>
转换为shared_ptr<Base>
,而对于另一个方向,您可以std::static_pointer_cast
和std::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);