2010-10-01 2 views
3

Можно создать дубликат:
Why doesn't delete set the pointer to NULL?Почему оператор C++ delete не устанавливает указатель на NULL?

Есть ли цель указателя на освобождаться память?

+0

Точный дубликат [Почему не удаляет указатель на NULL?] (Http://stackoverflow.com/questions/704466/why-doesnt-delete-set-the-pointer-to-null) –

+0

К сожалению, , Не видел этого. – Vanuan

+0

Также см. Http://stackoverflow.com/questions/1931126/is-it-good-practice-to-null-a-pointer-after-deleting-it –

ответ

1

Нет, там нет никакого реального использования, чтобы оставить его установить в исходное значение, кроме показывая, как неумелые люди в написании кода :-)

Это следует традиции C в том, что вы должны знать что ты делаешь. Стоимость того, что набор указателей с установленным компилятором был установлен в NULL, был признан слишком высоким в течение C-дней, и это перенесено на C++ с delete. Если вы правильно закодировали, то, если компилятор установил указатель на NULL, это отходы, так как вы либо установите его на что-то еще, либо не будете использовать его снова.

Если вы действительно хотите, чтобы сделать код более безопасным, вы могли бы сделать что-то вроде (в C):

void myFree (void **pMem) { 
    free (**pMem); 
    *pMem = NULL; 
} 
myFree (&x); 

вместо того, чтобы просто:

free (x); 

Но, если вы» перейдя на этот уровень (и представьте такую ​​мерзость), просто переключитесь на Java и сделайте с ним, тогда вам вообще не придется заниматься ручным управлением памятью.

+0

Или используйте интеллектуальные указатели. :) – GManNickG

6

C++ делает именно то, что вы ему говорите. Вы не указали указатель на нуль, вы удалили память, на которую указывает указатель.

Зачем вам тратить лишний шаг на то, чтобы установить его на нуль (по соображениям производительности), если вам не нужно?

5

Что делать, если это указатель на const?

Смежные вопросы