std::shared_ptr Exception Safety
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>() );