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

时间:2019-05-23 04:44:11

标签: c++ operator-overloading new-operator smart-pointers

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

1 个答案:

答案 0 :(得分:7)

make_shared必须分配两件事:正在构造的对象和shared_ptr的控制块。为了提高性能,它为两个内存分配了足够大的一块内存,然后进行放置更新。

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


如果要控制如何为shared_ptr管理的对象分配内存,请创建适当的分配器类,并使用allocate_shared代替make_shared