Указатель NULL
- это тот, который указывает на никуда. Когда вы разыскиваете указатель p
, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p
является нулевым указателем, местоположение, хранящееся в p
, является nowhere
, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception
.
В общем, это потому, что что-то не было правильно инициализировано.
Цитируя первоначальное предложение :
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 (более или менее).