make_shared如何为管理器对象和托管对象

时间:2016-10-12 18:20:47

标签: c++ c++11 shared-ptr make-shared

make_shared将动态地进行单个内存分配,从而提高性能。但是如何为托管对象和控制块使用new进行单个内存分配。我想知道内存实际上是如何在内部进行的。

1 个答案:

答案 0 :(得分:2)

  

make_shared将动态地进行单个内存分配

请注意,标准不要求这样做。这是可能的,良好的实现也是如此。

怎么可能呢?

例如,它可以通过分配一个未初始化的内存块来实现,该内存块足够大以包含控制块和指向它们的对齐要求的指向对象,然后使用{{3}构造两个对象中的每一个}。 placement new可用于分配内存。这有点类似于std::vector::reserve如何分配一个内存块,以后可以构建多个对象。