Что происходит с адресом после того, как оператор удаления был применен к нему в С++?

Если я delete указатель следующим образом:

delete myPointer;

И после этого не присвойте 0 указателю следующим образом:

myPointer = 0; //skipped this

Будет ли myPointer указывать на другой адрес памяти?

Ответы

Ответ 1

Нет, в большинстве реализаций он сохранит тот же адрес, что и ранее - delete обычно не изменяет адрес, и если вы не назначаете новое значение адреса, оно остается неизменным. Однако это не всегда гарантировано.

Не забывайте, что делать что-либо, кроме назначения нулевого указателя или другого действительного указателя, для уже указателя delete d - это поведение undefined - ваша программа может привести к сбою или неправильной эксплуатации.

Ответ 2

myPointer будет указывать на тот же адрес памяти. Но для вас было бы нецелесообразно использовать память на этом адресе, потому что delete вернул бы ее в среду выполнения/операционную систему, а операционная система моя выделила эту память для использования чего-то еще.

Ответ 3

Определенно, нет. Операция delete не меняет самого указателя - она ​​освобождает память, адресованную этим указателем.