将sharet_ptr<Derived>转换为shared_ptr<Base>

Converting sharet_ptr<Derived> to shared_ptr<Base>

本文关键字:gt lt ptr Base shared Derived sharet 转换      更新时间:2023-10-16

我有一个

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>(...);
}