【问题标题】:C++ shared_ptr order of releaseC++ shared_ptr 发布顺序
【发布时间】:2017-06-17 08:27:25
【问题描述】:

在我的代码中,我有

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-&gt;getSomethig() 获得的。我无法更改getSomething 方法。

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

【问题讨论】:

  • 这里的代码中,b的析构函数在a之前被调用。我没有看到问题
  • 那你能分享一个MVCE吗?基本上,分享在b 之前销毁a 的代码,以便我们更好地了解您的问题
  • 在 B 中持有指向 A 的共享指针

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


【解决方案1】:

假设你颠倒了原题中对象的顺序(否则这个题没有任何意义),你不需要改变释放的顺序,你应该使用shared_ptr构造函数的别名形式。类似的东西:

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

【讨论】:

  • 我认为无论如何都应该使用别名:依赖声明的顺序是脆弱的,并且违背了智能指针自动资源处理的概念。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-05-28
  • 2016-06-02
  • 1970-01-01
  • 1970-01-01
  • 2020-02-07
  • 2016-11-28
  • 2014-11-29
相关资源
最近更新 更多