C++11是否具有与boost::intrusive_ptr
等价的东西?
我的问题是,我的C++代码上有一个C风格的接口。接口的两侧都可以使用C++,但出于兼容性原因,需要公开C接口。我不能使用std::shared_ptr
,因为我必须通过两个(或多个)智能指针来管理对象。我无法用boost::intrusive_ptr
这样的东西找到解决方案。
c++11是否具有与boost::intrusive_ptr等效的功能?
否。
它确实有std::make_shared
,这意味着std::shared_ptr
的效率几乎与侵入式智能指针一样高,因为引用计数将存储在对象本身的内存中,从而提高引用的位置性和缓存使用率。它还提供了std::enable_shared_from_this
,当您只有指向shared_ptr
拥有的对象的内置指针时,它允许您检索std::shared_ptr
,但不允许您使用不同的智能指针类型来管理对象。
shared_ptr
希望完全负责管理该对象。不同的智能指针类型可能只管理"强"refcount而不管理"弱"refcount,这将允许计数不同步并破坏shared_ptr
的不变量。
注意:使用make_shared
可以使shared_ptr
的效率几乎与侵入指针一样高。当使用make_shared
时,对象和引用计数信息可以分配在单个内存块中,但仍然会有两个引用计数(针对"强"one_answers"弱"计数),而侵入式指针则不是这样,因为它们不支持weak_ptr
。此外,shared_ptr
对象本身总是必须存储两个指针(一个将由shared_ptr::get()
返回,另一个指向"控制块"的指针包含引用计数并知道所属对象的动态类型),因此其占用空间比侵入指针大。