我无法找到有关如果将空指针传递给std::make_unique
会发生什么情况的文档。
是否抛出异常?
答案 0 :(得分:8)
std::make_unique将所有传递给匹配的目标构造函数的参数转发。
因此,如果传递nullptr
,它将搜索接受nullptr_t的构造函数(或任何匹配的构造函数)。如果不存在,它将无法编译。
class A
{
public:
A(void*) { ... } // could also be A(int*) or template <typename T> A(T*)
};
...
std::make_unique<A>(nullptr); // constructs an A by calling A(void*), passing nullptr.
答案 1 :(得分:5)
std::make_unique
旨在通过将参数转发给包装对象的构造函数来构造包装对象。
将nullptr
传递给它并不意味着您的意思。如果您需要清除std::unique_ptr
的内容,只需致电reset()
。