c++ - 将 sharet_ptr<Derived> 转换为 shared_ptr<Base>

标签 c++ type-conversion shared-ptr

我有一个

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?

最佳答案

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

您不应该在类之外使用它,因此您的相关代码只是一种矫枉过正。应该是:

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

关于c++ - 将 sharet_ptr<Derived> 转换为 shared_ptr<Base>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62760079/

相关文章:

c++ - 如何将 CPoint 对象转换为字符串?

c++ - 派生类指针的重载解析

c++ - 我们可以将 char[undetermined_during_compile_time_size] 保留在 boost::shared_ptr 中吗?

c++ - 比较C++中move和智能指针的习惯?

c++ - boost async_wait 并在绑定(bind)中添加 "this"

c++ - 插入操纵杆后使用 DirectInput 接收信号

sql-server - SISS - 将 DT_STR 转换为 DT_DECIMAL 的问题(小数部分变为整数部分编号)

C++ - 类型转换错误

c++ - 为什么LNK1120 & LNK2019在模板和友元函数的情况下出现

c++ - cv::内存位置异常发生错误