Висячий указатель относится к указателю, который указывает на более недействительный объект. Это не должно быть основано на new/delete или malloc/free: на самом деле, не указатели могут болтаться. Можно сказать, что любая ссылка на другой объект или ресурс, где ссылка больше недействительна, но ссылка «не знает этого», «болтается».
Если вы разыменовываете висячий указатель, возникает неопределенное поведение (иногда ничего, иногда segfault, иногда ваш жесткий диск отформатирован, иногда ваш код путешествует во времени (да, я серьезно)).
Так что не разыменовывайте висячие указатели.
После delete
оба указателя болтаются.
Как правило, полезно рассуждать о программе, если ваш код требует, чтобы переменные требования находились в известных состояниях, которые вы можете определить по их типу и/или имени. Одним из примеров может быть «не иметь висячих указателей, установить для них значение null сразу после удаления»: тогда, если вы всегда инициализируете указатели значением null при создании, каждый указатель либо действителен, либо указывает на значение null.
Делать это с постоянными данными — отличная идея; это с локальными переменными в крошечных функциях часто добавляет больше шума, чем помогает.
Другой подход заключается в том, чтобы предпочесть использовать интеллектуальные указатели, но у них есть свои ловушки. Интеллектуальные указатели с подсчетом ссылок и маркировкой и очисткой превращают висячие указатели в утечку ресурсов! И уникальный ptr не имеет безопасного типа указателя «наблюдатель».
Локальный указатель после окончания его области действия перестает существовать. Это не может быть висячий указатель, так как это не указатель.
person
Yakk - Adam Nevraumont
schedule
29.05.2016
pt
— локальная переменная этой функции; после того, как управление переходит из функции, вам не нужно об этом беспокоиться. - person Beta   schedule 29.05.2016