std :: make_unique与空指针?

时间:2019-07-11 16:31:21

标签: c++ c++14 unique-ptr

我无法找到有关如果将空指针传递给std::make_unique会发生什么情况的文档。

是否抛出异常?

2 个答案:

答案 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()