我有一个继承自enable_shared_from_this<type>
的类型,以及一个继承自此类型的类型。现在我不能使用shared_from_this方法,因为它返回基类型,并且在特定的派生类方法中我需要派生类型。从这个直接构造一个shared_ptr是否有效?
编辑:
在相关问题中,如何从shared_ptr<base>
类型的右值移动到shared_ptr<derived>
类型?我使用dynamic_cast来验证它确实是正确的类型,但现在我似乎无法完成实际的移动。
答案 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