【问题标题】:Converting sharet_ptr<Derived> to shared_ptr<Base>将 sharet_ptr<Derived> 转换为 shared_ptr<Base>
【发布时间】:2020-07-06 16:10:34
【问题描述】:

我有一个

class A: public std::enable_shared_from_this<A>{....}

class B: public A{....}

稍后在代码中,我正在这样做:

std::shared_ptr<A> Construct(....){
    class_field=std::make_shared<B>(...);
    
    return class_field->shared_from_this();
}

使用这段代码,我想确保 B 的对象在当前类被销毁时被销毁,以及当客户端函数中的对象超出范围时。

这是处理这个问题的正确方法吗?有没有更好的方法从 shared_ptr 中获取 shared_ptr?

【问题讨论】:

    标签: c++ type-conversion shared-ptr


    【解决方案1】:

    shared_from_this 的目的是从类本身访问共享指针。

    你不应该在课堂之外使用它,因此你的代码只是一个矫枉过正。应该是:

    std::shared_ptr<A> Construct(....){
        return std::make_shared<B>(...);
    }
    

    【讨论】:

    • 哇,我从来没想过检查shared_ptr是否可以直接转换为shared_ptr
    • 智能指针的编写方式尽可能类似于原始指针,因此提供了隐式转换。
    猜你喜欢
    • 2017-08-06
    • 2010-11-24
    • 1970-01-01
    • 1970-01-01
    • 2021-06-21
    • 1970-01-01
    • 2021-11-28
    • 2021-02-04
    • 2012-11-04
    相关资源
    最近更新 更多