使用std::make_shared更高效,因它合并对象和控制块的内存分配为一次,减少开销并提升异常安全性;而用new构造需两次分配,性能更低且有泄漏风险。

直接使用
std::make_shared
std::make_shared 通常是首选的 shared_ptr 构造方法,因为它具有性能优势和异常安全性。
new
shared_ptr
当你使用
new
shared_ptr
shared_ptr
std::make_shared
std::make_shared
new
更具体地说,控制块包含了引用计数、weak count(用于
weak_ptr
shared_ptr
std::make_shared
考虑以下代码:
process_widget(std::shared_ptr<Widget>(new Widget), function_that_might_throw());
如果
new Widget
function_that_might_throw()
new Widget
shared_ptr
使用
std::make_shared
process_widget(std::make_shared<Widget>(), function_that_might_throw());
std::make_shared
shared_ptr
std::make_shared
虽然
std::make_shared
自定义删除器: 如果你需要使用自定义删除器,并且删除器的大小很大,那么将其存储在控制块中可能会造成额外的内存开销。在这种情况下,使用
new
shared_ptr
内存占用: 当
weak_ptr
std::make_shared
shared_ptr
weak_ptr
不完全类型:
std::make_shared
std::make_shared
总的来说,
std::make_shared
shared_ptr
std::make_shared
以上就是为什么应该优先使用std::make_shared而不是直接用new构造shared_ptr的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号