shared_ptr分配优化

pm1*_*100 2 c++ boost shared-ptr

在某个地方,我看到一篇关于创建boost shared_ptr的优化方法的帖子,以便它同时分配ptr管道和指针.我做了SO搜索,但是在shared_ptr 上有很多帖子,我找不到它.有人聪明,请重新发布

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

FooPtr Func()
{
   if(some_bad_thing)
      return xxx; // null
}
Run Code Online (Sandbox Code Playgroud)

对我来说

return FooPtr((Foo*)0);
Run Code Online (Sandbox Code Playgroud)

看起来有点笨拙

Sea*_*ett 6

boost::make_shared():

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

  • [一般信息:请注意,利用这一点存在很大的潜在问题:在没有强引用或弱引用之前,不能释放为对象分配的存储,因为引用计数结构是与拥有相同的分配的一部分宾语.使用普通的`shared_ptr`构造,只要没有更强的引用,就可以释放存储.这只是要记住的事情:如果你有非常大的对象,并且可能有一些弱的引用,这可能是一个问题. (4认同)