我正在一个项目中,其中几个类重载了运算符new
和delete
以使用自由列表,并且我尝试使用make_shared
来由智能管理我的分配当我意识到make_shared不使用重载版本,而是显式调用全局::new
时,指针。但是根据this make_unique
确实使用了重载版本。这让我很困惑。为什么make_shared
选择忽略运算符重载,而make_unique
却不选择?
答案 0 :(得分:7)
make_shared
必须分配两件事:正在构造的对象和shared_ptr
的控制块。为了提高性能,它为两个内存分配了足够大的一块内存,然后进行放置更新。
make_unique
不需要这样做,因为unique_ptr
不需要控制块。
如果要控制如何为shared_ptr
管理的对象分配内存,请创建适当的分配器类,并使用allocate_shared
代替make_shared
。