我一直在阅读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
按照我的理解,新构建的无论如何都会泄漏。