c++++中make_shared比直接new创建shared_ptr更高效且异常安全。1.性能方面:make_shared一次性分配内存用于对象和控制块,减少内存分配次数;而new需两次独立分配,效率较低。2.异常安全方面:使用make_shared时若构造抛出异常不会导致资源泄漏,而new可能引发未释放的原始指针问题。3.建议优先使用make_shared以提升性能与安全性,除非需要自定义删除器或已有原始指针。

在C++中,
make_shared
new
shared_ptr

使用
make_shared
new
make_shared
new
shared_ptr

具体来说:
make_shared<T>(args...)
shared_ptr<T>(new T(...))
由于内存分配是相对耗时的操作,减少分配次数可以带来性能上的提升,特别是在频繁创建对象的场景下。

在异常安全方面,
make_shared
new
foo(make_shared<T>(), make_shared<U>());
在这个例子中,如果编译器先调用两个
make_shared
foo
make_shared
而如果写成这样:
foo(shared_ptr<T>(new T()), shared_ptr<U>(new U()));
这里涉及了两次独立的
new
new T()
new U()
shared_ptr
new T()
因此,在处理可能抛出异常的构造函数时,推荐使用
make_shared
如果你希望写出更高效、更安全的代码,可以遵循以下几个建议:
make_shared
make_shared
shared_ptr
make_shared
基本上就这些。选择合适的方式来创建
shared_ptr
以上就是make_shared和直接new shared_ptr有什么区别 性能与异常安全对比的详细内容,更多请关注php中文网其它相关文章!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号