相关疑难解决方法(0)

new和make_shared用于共享指针

我发现了这篇文章,其中一个答案是@kerek SB说的

std::shared_ptr<Object> p1 = std::make_shared<Object>("foo");
std::shared_ptr<Object> p2(new Object("foo"));
Run Code Online (Sandbox Code Playgroud)

在你的代码中,第二个变量只是一个裸指针,而不是一个共享指针.

现在就肉了.make_shared(实际上)更有效,因为它在一个动态分配中将引用控制块与实际对象一起分配.相比之下,采用裸对象指针的shared_ptr的构造函数必须为引用计数分配另一个动态变量.权衡是make_shared(或其表兄allocate_shared)不允许您指定自定义删除器,因为分配是由分配器执行的.

(这不会影响对象本身的构造.从Object的角度来看,两个版本之间没有区别.更有效的是共享指针本身,而不是托管对象.)

现在我对这篇文章有两个问题,如果有人能澄清一下,我会很感激

  1. 为什么第二个不是共享指针?这不会增加引用计数

  2. make_shared如何只进行一次内存分配,而new将两次内存分配,从而使make_shared更有效率?

对此有点澄清将不胜感激.

c++ pointers shared-ptr make-shared

6
推荐指数
2
解决办法
3050
查看次数

标签 统计

c++ ×1

make-shared ×1

pointers ×1

shared-ptr ×1