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