delete (C++)

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск

В языке программирования C++ оператор delete возвращает память, выделенную оператором new, обратно в кучу. Вызов delete должен происходить для каждого вызова new, чтобы избежать утечки памяти. После вызова 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[] для массива объектов приведет к вызову деструктора для каждого объекта перед освобождением памяти, выделенной под массив.

См. также[править | править вики-текст]

Ссылки[править | править вики-текст]