make_shared() C++ 中的引用计数

make_shared() reference counting in C++

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

13.2.1 unique_ptr 和 shared_ptr

Using make_shared() is not just more convenient than separately making an object using new and then passing it to a shared_ptr, it is also notably more efficient because it does not need a separate allocation for the use count that is essential in the implementation of a shared_ptr.

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

编辑:我没有注意到文中的"seperate"这个词,所以我的问题是无关紧要的,艰难-我还是想问为什么make_shared()更有效率

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

如果您创建自己的std::shared_ptr object, these two memory block will be allocated separately. If you use std::make_shared,那么该函数只会为两个内存块分配一次。