获取派生类的弱指针

时间:2016-07-28 05:55:10

标签: c++11 inheritance visual-c++ smart-pointers

我有一堆派生类存储为共享指针,我想知道是否有任何方法可以从对象内部获取weak_ptr对象?

我尝试过使用shared_from_this()函数但问题是因为它是派生类,当我使基类继承自enable_shared_from_this时,派生类调用shared_from_this()它得到基类的shared_ptr 派生类我无法变成shared_ptr派生类

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

使用CRTP你可以实现它:

system

如果您想拥有一个通用的非模板基类,您可以依赖双重调度等技术,如下例所示:

#include <memory>

template<typename T>
struct B: std::enable_shared_from_this<T> {};

struct D: B<D> {};

int main() {
    std::shared_ptr<B<D>> b = std::make_shared<D>();
    std::shared_ptr<D> d = b->shared_from_this();
    std::weak_ptr<D> w = b->shared_from_this();
}

答案 1 :(得分:0)

正如@Torbjörn所说,使用dynamic_pointer_cast<Derived>(base_ptr)解决了这个问题,因为它允许我在继承中转换shared_ptr,这是不能直接允许的。