C++ 共享ptr分配优化

C++ 共享ptr分配优化,c++,boost,shared-ptr,C++,Boost,Shared Ptr,在某个地方,我看到了一篇关于创建boost shared_ptr的优化方法的帖子,这样它就可以同时分配ptr管道和指针对象。我做了一次搜索,但是在共享的ptr上有很多帖子,我找不到。请聪明人转贴一下好吗 编辑: 谢谢你的回答。额外的信用问题。返回空共享\u ptr的正确(首选)习惯用法是什么?即 FooPtr Func() { if(some_bad_thing) return xxx; // null } 对我来说 看起来有点邋遢参见: 除了方便性和风格之外,这样的函数也是

在某个地方,我看到了一篇关于创建boost shared_ptr的优化方法的帖子,这样它就可以同时分配ptr管道和指针对象。我做了一次搜索,但是在共享的ptr上有很多帖子,我找不到。请聪明人转贴一下好吗

编辑: 谢谢你的回答。额外的信用问题。返回空共享\u ptr的正确(首选)习惯用法是什么?即

FooPtr Func()
{
   if(some_bad_thing)
      return xxx; // null
}
对我来说

看起来有点邋遢参见:

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


我会为shared_ptr使用默认的ctor,或者调用make_shared而不使用参数。[一般信息:请注意,利用这一点存在一个很大的潜在问题:在没有强引用或弱引用之前,无法释放为对象分配的存储,因为引用计数结构是与所属对象相同的分配的一部分。对于普通的
共享\u ptr
结构只要不再有强引用,就可以解除对存储的分配。这只是需要记住的一点:如果您有非常大的对象,并且可能会有弱引用存在一段时间,这可能是一个问题。]
return FooPtr((Foo*)0);