【问题标题】:Why does `make_unique` use `new` while make_shared use `::new`为什么`make_unique`使用`new`而make_shared使用`::new`
【发布时间】:2019-10-09 14:43:22
【问题描述】:

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

【问题讨论】:

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


【解决方案1】:

make_shared 必须分配两件事:正在构造的对象和shared_ptr 的控制块。为了提高性能,它为两者分配了足够大的一块内存,然后将它们放置到消息中。

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


如果您想控制如何为要由shared_ptr 管理的对象分配内存,请创建适当的分配器类并使用allocate_shared 而不是make_shared

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-05
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多