Delete (C++): различия между версиями

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
[отпатрулированная версия][отпатрулированная версия]
Содержимое удалено Содержимое добавлено
изыски компиляторов тут нипричем, все дело в стандартной операции "запятая"
Нет описания правки
Строка 33: Строка 33:


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

== Источники ==
* {{публикация|книга
| автор = I. Horton, P. Van Weert
| часть =
| ссылка часть =
| заглавие = Beginning C++17: From Novice to Professional
| оригинал =
| ссылка =
| викитека =
| ответственный =
| издание = Fifth Edition
| место =
| издательство = Apress
| год = 2018
| volume =
| pages =
| columns =
| allpages =
| серия =
| isbn = 978-1-4842-3366-5
| doi = 10.1007/978-1-4842-3366-5
| тираж =
| ref = Horton, Van Weert
}}


== См. также ==
== См. также ==

Версия от 10:19, 27 апреля 2019

delete — ключевое слово языка программирования C++, которое было изначально введено в стандарт для осуществления освобождения памяти, выделенной оператором new.

В языке программирования 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[] для массива объектов приведет к вызову деструктора для каждого объекта перед освобождением памяти, выделенной под массив.

Источники

См. также

Ссылки