enable_shared_from_this和继承

时间:2010-12-20 16:09:18

标签: c++ boost c++11 shared-ptr smart-pointers

我有一个继承自enable_shared_from_this<type>的类型,以及一个继承自此类型的类型。现在我不能使用shared_from_this方法,因为它返回基类型,并且在特定的派生类方法中我需要派生类型。从这个直接构造一个shared_ptr是否有效?

编辑: 在相关问题中,如何从shared_ptr<base>类型的右值移动到shared_ptr<derived>类型?我使用dynamic_cast来验证它确实是正确的类型,但现在我似乎无法完成实际的移动。

1 个答案:

答案 0 :(得分:21)

获得shared_ptr<Base>后,您可以使用static_pointer_cast将其转换为shared_ptr<Derived>

您不能直接从shared_ptr创建this;这相当于:

shared_ptr<T> x(new T());
shared_ptr<T> y(x.get()); // now you have two separate reference counts