Это не ошибка для delete
нулевой указатель;по определению он ничего не делает.
Обычно это плохая идея - обнулять переменные-указатели после delete
, потому что единственный эффект, который он может иметь, - скрыть ошибку , которая вызывает многократное удаление(с нулевой переменной указателя второе удаление не будет иметь никакого эффекта, например, не произойдет сбой).
Как правило, обнуление указателей, на мой взгляд, относится ко всем остальным Microsoft, таким как венгерская нотация и обширнаяиспользование макросов.
Это то, что когда-то могло иметь хорошее обоснование, но что сегодня, по состоянию на 2011 год, имеет только отрицательные последствия и используется по чистой инерции: распространение идеи того же рода, что и Кнутоднажды описанный для генераторов случайных чисел - почти худший из возможных набирающий популярность, а затем включенный в качестве генератора по умолчанию в многочисленные языковые реализации и библиотеки, при этом большинство людей думают, что широкое использование означало, что оно должно быть по меньшей мере разумным.
ОднакоСказав это, для человека, которыйo склоняется к ультраформально педантичной, это может быть, по крайней мере, эмоционально удовлетворительной идеей для нулевых указателей, например, в std::vector
, после delete
.Причина в том, что Священный Стандарт, ISO / IEC 14882, позволяет деструктору std::vector
делать довольно отвратительные вещи, такие как копирование значений указателя вокруг.И в формально педантичном представлении даже такое копирование недопустимых значений указателя влечет за собой неопределенное поведение.Не то чтобы это практическая проблема.Во-первых, я не знаю абсолютно никакой современной платформы, где копирование имело бы какой-либо вред, а во-вторых, настолько много кода полагается на стандартные контейнеры, ведущие себя разумно, что им просто необходимо: иначе никто бы не использовал такую реализацию.
Ура & hth.