gpt4 book ai didi

c++ - 为什么 `make_unique`使用 `new`而make_shared使用 `::new`

转载 作者:太空狗 更新时间:2023-10-29 20:08:13 25 4
gpt4 key购买 nike

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

最佳答案

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

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


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

关于c++ - 为什么 `make_unique`使用 `new`而make_shared使用 `::new`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56268195/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com