0

出自:C++ 之旅(第二版)

13.2.1 unique_ptr 和 shared_ptr

使用make_shared()不仅比使用 new 单独创建对象然后将其传递给 shared_ptr 更方便,而且它也明显更有效,因为它不需要单独分配使用计数,这在实现shared_ptr

我的问题:为什么shared_ptr需要为引用计数分配内存而make_shared()不需要?(它是否只会在至少有两个对数据的引用时才分配它?)

编辑:我没有注意到文本中的“单独”这个词,所以我的问题是无关紧要的,Tough - 我仍然想问为什么 make_shared() 更有效

4

1 回答 1

3

共享指针包含两部分:指向您创建的“对象”的指针,以及指向包含引用计数器和可能需要的其他一些元数据的特殊控制块的指针。

如果创建自己的std::shared_ptr对象,这两个内存块将分别分配。如果您使用std::make_shared,那么该函数只会为两个内存块进行一次分配。

于 2018-10-09T08:26:54.077 回答