std::shared_ptr Exception Safety

对着背影说爱祢 提交于 2019-12-03 04:20:52
Igor Tandetnik
template<class Y> explicit shared_ptr(Y* p);

[util.smartptr.shared.const]/6 Throws: bad_alloc, or an implementation-defined exception when a resource other than memory could not be obtained.
[util.smartptr.shared.const]/7 Exception safety: If an exception is thrown, delete p is called.

So no, no memory leak.

Late answer, but it is better to use make_shared() for exception safety, as outlined in GotW #102: The following code is not exception safe:

 f( std::shared_ptr<T1>{ new T1 }, std::shared_ptr<T2>{ new T2 } );

Whereas the following is:

f( std::make_shared<T1>(), std::make_shared<T2>() );
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!