【问题标题】:shared_ptr allocation optimizationshared_ptr 分配优化
【发布时间】:2010-09-24 22:38:54
【问题描述】:

我在某处看到一篇关于创建 boost shared_ptr 的优化方法的帖子,以便它同时分配 ptr 管道和指针。我进行了 SO 搜索,但在 shared_ptr 上有 很多 帖子,但我找不到。有大神可以转发一下吗

编辑: 谢谢你的回答。额外的信用问题。返回 null shared_ptr 的正确(首选?)习语是什么?即

FooPtr Func()
{
   if(some_bad_thing)
      return xxx; // null
}

对我来说

return FooPtr((Foo*)0);

看起来有点笨拙

【问题讨论】:

  • 我会为 shared_ptr 使用默认 ctor,或者在没有参数的情况下调用 make_shared。

标签: c++ boost shared-ptr


【解决方案1】:

boost::make_shared():

除了方便和风格之外,这样的函数也是异常安全的,而且速度相当快,因为​​它可以为对象及其相应的控制块使用单个分配,从而消除了 shared_ptr 构造开销的很大一部分。这消除了关于 shared_ptr 的主要效率抱怨之一。

【讨论】:

  • [关于一般信息:请注意,利用这一点有一个很大的潜在问题:在没有强或弱引用之前,无法释放为对象分配的存储空间,因为引用计数结构是与拥有的对象相同的分配的一部分。使用普通的shared_ptr 构造,只要没有更多的强引用,就可以释放存储空间。这只是要记住的一点:如果你有非常大的对象并且可能有一段时间的弱引用,这可能是一个问题。]
猜你喜欢
  • 1970-01-01
  • 2018-08-22
  • 1970-01-01
  • 2021-06-17
  • 1970-01-01
  • 1970-01-01
  • 2018-12-11
  • 2014-05-19
相关资源
最近更新 更多