为什么"make_unique"使用"new",而make_shared使用&q



我正在做一个项目,其中几个类重载运算符newdelete使用自由列表,当我意识到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

相关内容

  • 没有找到相关文章

最新更新