为什么 `make_unique` 使用 `new` 而 make_shared 使用 `::new`
Why does `make_unique` use `new` while make_shared use `::new`
我正在做一个项目,其中几个 类 重载运算符 new
和 delete
来利用空闲列表,我尝试使用 make_shared
来当我意识到 make_shared 不使用重载版本而是显式调用全局 ::new
时,我的分配由智能指针管理。但是根据 this make_unique
确实使用了重载版本。这让我很困惑。为什么 make_shared
选择忽略运算符重载而 make_unique
不选择?
make_shared
必须分配两件事:正在构造的对象和 shared_ptr
的控制块。为了提高性能,它为两者分配了足够大的内存块,然后 placement-news 它们。
make_unique
不需要这样做,因为 unique_ptr
不需要控制块。
如果您想控制如何为 shared_ptr
管理的对象分配内存,请创建适当的分配器 class 并使用 allocate_shared
而不是 make_shared
.
我正在做一个项目,其中几个 类 重载运算符 new
和 delete
来利用空闲列表,我尝试使用 make_shared
来当我意识到 make_shared 不使用重载版本而是显式调用全局 ::new
时,我的分配由智能指针管理。但是根据 this make_unique
确实使用了重载版本。这让我很困惑。为什么 make_shared
选择忽略运算符重载而 make_unique
不选择?
make_shared
必须分配两件事:正在构造的对象和 shared_ptr
的控制块。为了提高性能,它为两者分配了足够大的内存块,然后 placement-news 它们。
make_unique
不需要这样做,因为 unique_ptr
不需要控制块。
如果您想控制如何为 shared_ptr
管理的对象分配内存,请创建适当的分配器 class 并使用 allocate_shared
而不是 make_shared
.