【发布时间】:2018-01-24 01:07:48
【问题描述】:
对于 unique_ptr 而言,删除器的类型是智能指针的一部分,但与 shared_ptr 相比,这如何帮助编译器生成更小的运行时数据结构和更快的 unique_ptr 代码?
【问题讨论】:
-
可能是因为 shared_ptr 的开销与删除器无关,更多是因为线程安全引用计数?
标签: c++ c++11 c++14 shared-ptr unique-ptr
对于 unique_ptr 而言,删除器的类型是智能指针的一部分,但与 shared_ptr 相比,这如何帮助编译器生成更小的运行时数据结构和更快的 unique_ptr 代码?
【问题讨论】:
标签: c++ c++11 c++14 shared-ptr unique-ptr
删除器不是这里提到的。
shared_ptr<> 需要为每个分配的对象分配(除其他外)两个额外的数字(强引用计数和弱引用计数)。
如果使用std::make_shared(),它们将与对象本身一起存储,否则,需要为它单独分配。
此外,请记住,unique_ptr<> 可以利用空类优化来消除无状态删除器的任何开销。
gcc,至少,似乎是这样做的(至少在std::default_delete 中):
https://godbolt.org/g/nbENL7
【讨论】: