可以从'enable_shared_from_this'派生一个类来提高性能吗?

Bil*_*eal 18 c++ performance shared-ptr c++11

make_shared比单独主叫更好的性能new和创建shared_ptr因为make_shared分配用于在相同的存储块作为客户端对象实例(有效地赋予的引用计数和弱计数空间shared_ptr的大部分的性能优势intrusive_ptr).

enable_shared_from_this给出一个共享指针,而不引用任何共享指针.因此,必须以某种方式从客户端对象内部访问诸如引用和弱计数之类的内容.因此,enable_shared_from_this引起类似的侵入性计数是明智的make_shared.

但是,我不知道这样的事情是如何实现的(我不确定即使我查看实际来源,我也会按照那里发生的事情).

那么(出于性能原因)标记我的类enable_shared_from_this是否有意义,如果我知道它只会被用作a shared_ptr而不是作为原始对象?

Dav*_*eas 8

我从来没有深入研究实现的细节,但是为了shared_from_this工作,对象必须已经由外部管理shared_ptr,所以它在某种程度上是无关的.即第一个shared_ptr可能已创建,make_shared在这种情况下,计数对象在一起(正如你所说的那样侵入指针),但不一定是这种情况.

我的第一个猜测是enable_shared_from_this增加相当于a weak_ptr,而不是a shared_ptr.编辑:我刚刚验证了gcc4.6中的实现:

template <typename _Tp>
class enable_shared_from_this {
...
mutable weak_ptr<_Tp> _M_weak_this;
};
Run Code Online (Sandbox Code Playgroud)