std :: make_unique с нулевым указателем? - PullRequest
1 голос
/ 11 июля 2019

Мне не удалось найти документацию о том, что произойдет, если я передам нулевой указатель на std::make_unique.

Выдается исключение?

Ответы [ 2 ]

8 голосов
/ 11 июля 2019

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.
5 голосов
/ 11 июля 2019

std::make_unique предназначен для создания обернутого объекта путем пересылки аргументов в конструктор обернутого объекта.

Передача nullptr для него не имеет никакого смысла в том смысле, в котором вы имеете в виду.Если вам нужно очистить содержимое std::unique_ptr, просто позвоните reset().

...