为什么 `make_unique` 使用 `new` 而 make_shared 使用 `::new`

Why does `make_unique` use `new` while make_shared use `::new`

我正在做一个项目,其中几个 类 重载运算符 newdelete 来利用空闲列表,我尝试使用 make_shared 来当我意识到 make_shared 不使用重载版本而是显式调用全局 ::new 时,我的分配由智能指针管理。但是根据 this make_unique 确实使用了重载版本。这让我很困惑。为什么 make_shared 选择忽略运算符重载而 make_unique 不选择?

make_shared 必须分配两件事:正在构造的对象和 shared_ptr 的控制块。为了提高性能,它为两者分配了足够大的内存块,然后 placement-news 它们。

make_unique 不需要这样做,因为 unique_ptr 不需要控制块。


如果您想控制如何为 shared_ptr 管理的对象分配内存,请创建适当的分配器 class 并使用 allocate_shared 而不是 make_shared.