make_shared
比单独调用 new
并创建 shared_ptr
性能更高,因为 make_shared
为引用分配空间在与客户端对象实例相同的内存块中计数和弱计数(有效地为 shared_ptr
提供了 intrusive_ptr
的大部分性能优势)。
enable_shared_from_this
给出一个共享指针,而不引用任何共享指针。因此,必须以某种方式从客户端对象内部访问诸如引用和弱计数之类的东西。因此,enable_shared_from_this
导致类似于 make_shared
的侵入性计数是明智的。
但是,我不知道如何实现类似的东西(即使我查看实际来源,我也不确定我是否会关注其中发生的事情)。
如果我知道它只会用作 shared_ptr
而永远不会用作原始对象?
最佳答案
我从来没有深入研究过实现的细节,但是要使 shared_from_this
工作,对象必须已经由外部 shared_ptr
管理,所以在某种程度上是无关。 IE。第一个 shared_ptr
可能是用 make_shared
创建的,在这种情况下 count 和 object 在一起(如你所说intrusive pointer like),但不一定是这样。
我的第一个猜测是 enable_shared_from_this
添加了 weak_ptr
的等效项,而不是 shared_ptr
。 编辑:我刚刚验证了gcc4.6中的实现:
template <typename _Tp>
class enable_shared_from_this {
...
mutable weak_ptr<_Tp> _M_weak_this;
};
关于c++ - 从 'enable_shared_from_this' 派生一个类可以提高性能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6513660/