【发布时间】:2014-11-22 21:39:10
【问题描述】:
我遇到了this 的帖子和@kerek SB states 的答案之一
std::shared_ptr<Object> p1 = std::make_shared<Object>("foo"); std::shared_ptr<Object> p2(new Object("foo"));在您的代码中,第二个变量只是一个裸指针,而不是 完全共享指针。
现在是肉。 make_shared (在实践中)更有效,因为 它分配参考控制块与实际 一次动态分配中的对象。相比之下,构造函数 对于接受裸对象指针的 shared_ptr 必须分配另一个 引用计数的动态变量。权衡是 make_shared(或其表亲 allocate_shared)不允许您 指定一个自定义删除器,因为分配是由 分配器。
(这不影响对象本身的构造。从 对象的视角这两个版本没有区别。 更有效的是共享指针本身,而不是托管 对象。)
现在我有两个关于这篇文章的问题,如果有人能澄清这一点,我将不胜感激
为什么第二个不是共享指针?这不会增加引用计数吗
make_shared 如何只分配一个内存而 new 分配两个因此 让 make_shared 更高效?
我们将不胜感激。
【问题讨论】:
-
new Object("foo")首先被独立评估,创建一个不知道它将由共享指针管理的块,因此没有引用计数的大小。跨度> -
希望有人 ping Kerrek
标签: c++ pointers shared-ptr make-shared