3

Я не понимаю, что означает delete.удалить операцию в C++

Например, delete ptr;, так что pointer variable ptr удален или the memory ptr pointed to удален?

int *ptr = new int; 
*ptr = 7; 
delete ptr; 
+2

память ptr указана на удаленный – yms

+0

так что нет 7 больше прав? –

+2

Вероятно, где-то есть «7», но пространство, которое он занимает, будет повторно использовано дополнительным распределением в конечном счете, поэтому его дни считаются. –

ответ

11

так что переменная PTR указатель будет удален или PTR памяти указал на это удаляется?

Память указывает на по ptr является удален (т.е. помечается как свободное - содержимое может все еще быть там, но, как @JonTrauntvein также упоминалось, в зависимости от памяти, что РЕАЛИЗАЦИИ может быть перезаписана с определенная модель - к ней никогда не следует обращаться после удаления).

Сам указатель не изменяется, и все еще содержит то же самое значение (то есть адрес памяти, он указывал на), но это хорошая привычка нуль указатель после удаления, т.е. ptr = NULL;.

Эта память была выделена на куче new int и всегда должна быть освобождена с помощью delete.


int *ptr = new int; 

-> память выделяется в куче - количество: sizeof(int) - ptr указывает на эту ячейку памяти.

*ptr = 7; 

-> Значение 7 размещается в выделенной памяти.

delete ptr; 

-> Выделенная память (содержащую 7) удалена (т.е. помечается как свободное для другого использования). prt все еще указывает на освобожденную память. Доступ к ней недопустим, поэтому указатель должен быть установлен в NULL.

+2

Переменная-указатель 'ptr' по-прежнему имеет такое же значение после вызова' delete', оно больше не указывает на 'int'. –

+0

@DavidSchwartz - Действительно - добавлена ​​дополнительная информация. –

+2

Нет гарантии, что память, указанная перед удалением, будет отключена оператором удаления. Некоторые реализации, такие как библиотека времени выполнения отладки Visual C++, перезаписывают память распознаваемым шаблоном, который иногда помогает распознать, когда вы пытаетесь получить доступ к удаленной памяти. –

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