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

Gam*_*anA 3 c++ smart-pointers operator-overloading new-operator

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

Mil*_*nek 7

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

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


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