Простой факт заключается в следующем: C ++ - небезопасный язык.
И это хорошо. Если вы используете C ++, вы хотите контролировать, когда у вас есть безопасность, как она у вас есть и где вы хотите быть небезопасными.
Когда вы вручную удаляете указатель, нигде нет никаких указаний на то, что указатель был удален. Вот почему большинство современных текстов на C ++ сообщают вам, что, если у вас нет какой-либо конкретной причины, не используйте голые указатели. Вам не следует вручную удалять указатели вообще, если опять же у вас нет особых причин для этого.
Если вы создаете структуру данных, вам решать, насколько безопасной должна быть эта структура данных. Обратите внимание, что структуры данных стандартной библиотеки C ++ позволяют итераторам (обобщенным указателям) становиться недействительными при определенных условиях. Это возлагает на пользователя ответственность знать, что они делают.
Выигрыш от этого - высокая производительность. Если вам не нужна такая производительность, вам нужно использовать более безопасный контейнер или структуру данных. Если вам нужна такая безопасность, вам следует использовать умный указатель для элементов в вашей структуре данных. Пользователь должен получить shared_ptr<>
или weak_ptr<>
объекты, которые ссылаются на узлы, а не на голые указатели. И так далее.
C ++ небезопасен. Конечно, это небезопасно; это C ++. Но это хорошо.
person
Nicol Bolas
schedule
27.12.2011
a
значение null после удаления, чтобы обозначить, что теперь он недействителен, хотя это бывает редко. - person Pubby   schedule 28.12.2011