Почему `make_unique < T [N] >` запрещено?

Указатель NULL - это тот, который указывает на никуда. Когда вы разыскиваете указатель p, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p является нулевым указателем, местоположение, хранящееся в p, является nowhere, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception.

В общем, это потому, что что-то не было правильно инициализировано.

26
задан R. Martinho Fernandes 2 July 2013 в 11:34
поделиться

1 ответ

Цитируя первоначальное предложение :

T[N]

Начиная с N3485, unique_ptr не обеспечивает частичную специализацию для T[N]. Тем не менее, пользователи будут сильно склонны писать make_unique<T[N]>(). Это беспроигрышный сценарий. Возвращение unique_ptr<T[N]> выберет основной шаблон для отдельных объектов, что является странным. Возвращение unique_ptr<T[]> было бы исключением из остального железного правила, которое make_unique<something>() возвращает unique_ptr<something>. Следовательно, это предложение делает T[N] плохо сформированным здесь, что позволяет реализациям создавать полезные static_assert сообщения.

Автор предложения, Стефан Т. Лававей, иллюстрирует эту ситуацию в этом видео на Core C ++ (любезно предоставлено chris ), начиная с минуты 1:01 : 10 (более или менее).

33
ответ дан Community 2 July 2013 в 11:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: