Присвоение указателю сразу после удаления - PullRequest
4 голосов
/ 15 ноября 2009

Мне было интересно, безопасно ли это делать ...

delete p_pointer;
p_pointer = p_otherPointer;

Вместо ...

delete p_pointer;
p_pointer = 0;
p_pointer = p_otherPointer;

Я бы предположил, что так как между удалением и назначением нет новых выделений памяти, я просто хочу убедиться.

Ответы [ 3 ]

17 голосов
/ 15 ноября 2009

Да, это безопасно. Бесполезно устанавливать удаленный указатель в NULL, если вы все равно собираетесь его переназначить. Причина, по которой люди устанавливают удаленные указатели в NULL, заключается в том, что они могут «пометить» его как удаленный, чтобы позже они могли проверить, было ли оно уже удалено.

6 голосов
/ 15 ноября 2009

Да. delete является оператором. Вы передаете ему указатель, и он удаляет объект, на который указывает этот указатель. Он ничего не делает с самим указателем.

После этой точки вы больше не можете разыменовывать указатель со значением , которое имеет этот указатель, но вы можете продолжать использовать саму переменную указателя, например, указывая ее на другой объект соответствующий тип.

1 голос
/ 15 ноября 2009

На самом деле auto_ptr::reset делает именно это (по крайней мере, в реализациях, которые я видел)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...