C++11有没有等同于boost::intrusive_ptr的东西?
我的问题是在我的C++代码上有一个C风格的接口。接口的两端都可以使用C++,但出于兼容性原因,需要公开C接口。我不能使用std::shared_ptr,因为我必须通过两个(或更多)智能指针来管理对象。我想不出像boost::intrusive_ptr这样的解决方案。
发布于 2012-12-17 19:22:13
c++11有没有等同于boost::intrusive_ptr的东西?
不是的。
它确实有std::make_shared,这意味着std::shared_ptr几乎和侵入式智能指针一样高效(参见下面的注释),因为引用计数将存储在与对象本身相邻的内存中,从而提高引用的局部性和缓存使用率。它还提供了std::enable_shared_from_this,当您只有指向std::shared_ptr所拥有的对象的内置指针时,它允许您检索shared_ptr,但不允许您使用不同的智能指针类型管理对象。
shared_ptr期望完全负责管理对象。不同的智能指针类型可能只管理“强”引用计数,而不管理“弱”引用计数,这将允许计数不同步并破坏shared_ptr的不变量。
注意:使用make_shared允许shared_ptr几乎与侵入式指针一样有效。当使用make_shared时,对象和引用计数信息可以分配在单个内存块中,但仍然会有两个引用计数(对于“强”和“弱”计数),这不适用于侵入式指针,因为它们不支持weak_ptr。此外,shared_ptr对象本身总是必须存储两个指针(一个将由shared_ptr::get()返回,另一个指向包含引用计数并知道所拥有对象的动态类型的“控制块”的指针),因此具有比侵入式指针更大的占用空间。
https://stackoverflow.com/questions/13912286
复制相似问题