知识卡片

make函数优先

普通读书笔记卡 · 1416

内容

make_unique/make_shared 减少重复类型及裸 new 交接的异常窗口;make_shared 通常合并对象与控制块分配。自定义删除器、列表初始化或自定义内存管理可能需要其他构造方式。大对象销毁后,长寿命 weak_ptr 仍可能使合并分配的内存保留,见[[弱引用延迟释放内存]]。

参考来源

- 位置:《Effective Modern C++》第4章《智能指针》,条款二十一:优先考虑使用 std::make_unique 和 std::make_shared 而非 new(源文件:_epub-src/EPUB/text/ch005.xhtml) - 结论依据:原文总结 make 函数的异常安全与分配收益,并列出删除器、内存管理及弱引用寿命例外。 - 原始内容:- 和直接使用 new 相比, make 函数消除了代码重复,提高了异常安全性。对于 std::make_shared 和 std::allocate_shared ,生成的代码更小更快。 - 不适合使用 make 函数的情况包括需要指定自定义删除器和希望用花括号初始化。 - 对于 std::shared_ptr s,其他不建议使用 make 函数的情况包括(1)有自定义内存管理的类;(2)特别关注内存的系统,非常大的对象,以及 std::weak_ptr…