WikiSort.ru - Программирование

ПОИСК ПО САЙТУ | о проекте

В языке программирования C++ оператор delete возвращает память, выделенную оператором new, обратно в кучу. Вызов delete должен происходить для каждого вызова new, чтобы избежать утечки памяти. После вызова delete объект, указывающий на этот участок памяти, становится некорректным и не должен больше использоваться. Многие программисты присваивают 0 (нуль-указатель) указателям после использования delete, чтобы минимизировать количество ошибок программирования. Удаление нуль-указателя фактически не имеет эффекта, так что нет необходимости проверять указатель на равенство 0 перед вызовом delete (такая проверка входит в алгоритм оператора delete).

Фрагмент кода в качестве примера:

int *p_var = nullptr;  // объявление нового указателя
p_var = new int;       // память динамически выделяется
 
/* .......
остальной код
........*/

delete p_var;          // память освобождается
p_var = nullptr;       // указатель заменяется на нуль-указатель

Массивы, созданные (выделенные) при помощи new [], аналогичным образом могут быть уничтожены (освобождены) при помощи delete []:

int size = 10;
int *p_var = nullptr;  // объявление нового указателя
p_var = new int [size];// память динамически выделяется

/* .......
остальной код
........*/

delete [] p_var;       // память освобождается
p_var = nullptr;       // указатель заменяется на нуль-указатель

Вызов delete[] для массива объектов приведет к вызову деструктора для каждого объекта перед освобождением памяти, выделенной под массив.

Замечание. Хотя в стандарте языка это не оговорено, некоторые компиляторы (например, C++ Builder) допускают после ключевого слова delete перечислять через запятую несколько указателей, однако освобождение памяти происходит только по первому указателю.

См. также

Ссылки

Данная страница на сайте WikiSort.ru содержит текст со страницы сайта "Википедия".

Если Вы хотите её отредактировать, то можете сделать это на странице редактирования в Википедии.

Если сделанные Вами правки не будут кем-нибудь удалены, то через несколько дней они появятся на сайте WikiSort.ru .




Текст в блоке "Читать" взят с сайта "Википедия" и доступен по лицензии Creative Commons Attribution-ShareAlike; в отдельных случаях могут действовать дополнительные условия.

Другой контент может иметь иную лицензию. Перед использованием материалов сайта WikiSort.ru внимательно изучите правила лицензирования конкретных элементов наполнения сайта.

2019-2024
WikiSort.ru - проект по пересортировке и дополнению контента Википедии