知识卡片
shared_ptr控制块
内容
shared_ptr 通过控制块管理共享资源,记录强弱引用计数及删除信息,带来控制块分配和计数同步开销。共享所有权应对应真实生命周期需求,而不是默认参数风格。从原始指针重复建立控制块有双重销毁风险,见[[同一对象一个控制块]]。
参考来源
- 位置:《Effective Modern C++》第4章《智能指针》,条款十九:对于共享资源使用 std::shared_ptr(源文件:_epub-src/EPUB/text/ch005.xhtml)
- 结论依据:原文说明控制块、原子引用计数和裸指针构造风险,支持共享所有权需有实际用途。
- 原始内容:std::shared_ptr 为有共享所有权的任意资源提供一种自动垃圾回收的便捷方式。 较之于 std::unique_ptr , std::shared_ptr 对象通常大两倍,控制块会产生开销,需要原子性的引用计数修改操作。 默认资源销毁是通过 delete ,但是也支持自定义删除器。删除器的类型是什么对于 std::shared_ptr 的类型没有影响。 避免从原始指针变量上创建 std::shared_ptr 。