Я читаю GOTW102 и задаюсь вопросом, почему make_unique
более безопасен в плане исключений, чем другие случаи, или в подробно, почему f(new T(...))
более безопасен в плане исключений, чем f(new T1(...), new T2(...))
.
Реализация make_unique
из блога гласит:
template<typename T, typename ...Args>
std::unique_ptr<T> make_unique( Args&& ...args )
{
return std::unique_ptr<T>( new T( std::forward<Args>(args)... ) );
}
Теперь мне интересно, является ли f(new T(...))
в целом безопасным от исключений (без утечек) или он просто безопасен от исключений в случае make_unique
из-за дополнительных знаний, которые конструктор std::unique_ptr
не выдает? (Поскольку, если бы это было так, свежесконструированный T
все равно бы просочился, насколько я понимаю.