C ++ shared_ptr发布顺序

时间:2017-01-31 18:58:35

标签: c++ destructor shared-ptr lifetime order-of-execution

在我的代码中,我有

void Test(){
   std::shared_ptr<A> a = std::shared_ptr<A>(new A());
   std::shared_ptr<B> b = std::shared_ptr<B>(new B(a->getSomething());
}

问题是ab之前发布,但在b发布期间,我需要来自a的内容,这是通过a->getSomethig()获得的。我无法更改getSomething方法。

我可以更改(设置)释放共享指针的顺序吗?

1 个答案:

答案 0 :(得分:2)

假设您颠倒了原始问题中对象的顺序(否则,问题没有任何意义),您不需要更改发布顺序,而应该使用shared_ptr构造函数的别名形式。这样的事情:

std::shared_ptr<B> b(a, a->getSomething());