将 sharet_ptr<Derived> 转换为 shared_ptr<Base>
Converting sharet_ptr<Derived> to shared_ptr<Base>
我有一个
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 的对象在当前 class 被销毁后以及客户端函数中的对象超出范围时被销毁。
这是处理这个问题的正确方法吗?有没有更好的方法从 shared_ptr 得到 shared_ptr?
shared_from_this
的目的是从 class 本身访问共享指针。
您不应在 class 之外使用它,因此您的相关代码简直是矫枉过正。应该是:
std::shared_ptr<A> Construct(....){
return std::make_shared<B>(...);
}
我有一个
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 的对象在当前 class 被销毁后以及客户端函数中的对象超出范围时被销毁。
这是处理这个问题的正确方法吗?有没有更好的方法从 shared_ptr 得到 shared_ptr?
shared_from_this
的目的是从 class 本身访问共享指针。
您不应在 class 之外使用它,因此您的相关代码简直是矫枉过正。应该是:
std::shared_ptr<A> Construct(....){
return std::make_shared<B>(...);
}