Что происходит с адресом после того, как оператор удаления был применен к нему в С++?
Если я delete
указатель следующим образом:
delete myPointer;
И после этого не присвойте 0
указателю следующим образом:
myPointer = 0; //skipped this
Будет ли myPointer
указывать на другой адрес памяти?
Ответы
Ответ 1
Нет, в большинстве реализаций он сохранит тот же адрес, что и ранее - delete
обычно не изменяет адрес, и если вы не назначаете новое значение адреса, оно остается неизменным. Однако это не всегда гарантировано.
Не забывайте, что делать что-либо, кроме назначения нулевого указателя или другого действительного указателя, для уже указателя delete
d - это поведение undefined - ваша программа может привести к сбою или неправильной эксплуатации.
Ответ 2
myPointer будет указывать на тот же адрес памяти. Но для вас было бы нецелесообразно использовать память на этом адресе, потому что delete вернул бы ее в среду выполнения/операционную систему, а операционная система моя выделила эту память для использования чего-то еще.
Ответ 3
Определенно, нет. Операция delete
не меняет самого указателя - она освобождает память, адресованную этим указателем.