Я не понимаю, что означает delete
.удалить операцию в C++
Например, delete ptr;
, так что pointer variable ptr
удален или the memory ptr pointed to
удален?
int *ptr = new int;
*ptr = 7;
delete ptr;
Я не понимаю, что означает delete
.удалить операцию в C++
Например, delete ptr;
, так что pointer variable ptr
удален или the memory ptr pointed to
удален?
int *ptr = new int;
*ptr = 7;
delete ptr;
так что переменная PTR указатель будет удален или PTR памяти указал на это удаляется?
Память указывает на по ptr
является удален (т.е. помечается как свободное - содержимое может все еще быть там, но, как @JonTrauntvein также упоминалось, в зависимости от памяти, что РЕАЛИЗАЦИИ может быть перезаписана с определенная модель - к ней никогда не следует обращаться после удаления).
Сам указатель не изменяется, и все еще содержит то же самое значение (то есть адрес памяти, он указывал на), но это хорошая привычка нуль указатель после удаления, т.е. ptr = NULL;
.
Эта память была выделена на куче new int
и всегда должна быть освобождена с помощью delete
.
int *ptr = new int;
-> память выделяется в куче - количество: sizeof(int)
- ptr
указывает на эту ячейку памяти.
*ptr = 7;
-> Значение 7
размещается в выделенной памяти.
delete ptr;
-> Выделенная память (содержащую 7) удалена (т.е. помечается как свободное для другого использования). prt
все еще указывает на освобожденную память. Доступ к ней недопустим, поэтому указатель должен быть установлен в NULL
.
Переменная-указатель 'ptr' по-прежнему имеет такое же значение после вызова' delete', оно больше не указывает на 'int'. –
@DavidSchwartz - Действительно - добавлена дополнительная информация. –
Нет гарантии, что память, указанная перед удалением, будет отключена оператором удаления. Некоторые реализации, такие как библиотека времени выполнения отладки Visual C++, перезаписывают память распознаваемым шаблоном, который иногда помогает распознать, когда вы пытаетесь получить доступ к удаленной памяти. –
память ptr указана на удаленный – yms
так что нет 7 больше прав? –
Вероятно, где-то есть «7», но пространство, которое он занимает, будет повторно использовано дополнительным распределением в конечном счете, поэтому его дни считаются. –