Управление памятью
Чем отличаются delete и delete[]? Что случится, если вызвать delete у объекта, созданного через new[]?
Отличия
delete
и
delete[]
:
-
delete: Используется для освобождения памяти, выделенной для одиночного объекта с помощьюnew.int* p = new int; delete p; -
delete[]: Используется для освобождения памяти, выделенной для массива объектов с помощьюnew[].int* arr = new int[10]; delete[] arr;
delete
вместо
delete[]
для объекта, созданного через
new[]
, приводит к неопределённому поведению. Это может вызвать:
-
Неполное освобождение памяти (утечка памяти).
-
Потенциальные ошибки выполнения или сбои программы.
Рекомендация:
Всегда использовать delete[] для освобождения памяти, выделенной с помощью new[], чтобы избежать неопределённого поведения и корректно освободить всю выделенную память.
Что такое memory leak?
Memory leak (утечка памяти) — это ситуация, когда программа
выделяет память динамически (например, с помощью new или
malloc), но не освобождает её (с помощью delete или
free). В результате, используемая память остаётся занятой и
недоступной для повторного использования, что может привести к исчерпанию
доступной памяти и замедлению или краху программы.