Оператор delete
Оператор delete освобождает память, которая была
ранее выделена с помощью оператора new. Перед
освобождением памяти для объекта вызывается его деструктор.
Оператор принимает указатель на объект, память под который
нужно освободить. Для освобождения массивов используется
отдельная форма delete[].
Синтаксис
delete pointer;
delete[] array_pointer;
Пример
Давайте выделим память под одно целое число с помощью
оператора new, запишем в него значение и затем
освободим память оператором delete:
#include <iostream>
using namespace std;
int main()
{
int* ptr = new int(42);
cout << *ptr << endl;
delete ptr;
return 0;
}
Результат выполнения кода:
42
Пример
Давайте создадим объект класса, а затем освободим память.
Обратите внимание, что при вызове delete автоматически
вызывается деструктор:
#include <iostream>
using namespace std;
class Test
{
public:
Test()
{
cout << "Constructor" << endl;
}
~Test()
{
cout << "Destructor" << endl;
}
};
int main()
{
Test* ptr = new Test();
delete ptr;
return 0;
}
Результат выполнения кода:
"Constructor"
"Destructor"
Пример
Для освобождения памяти, выделенной под массив, нужно
использовать форму delete[]. Давайте выделим массив
из 5 элементов и освободим его:
#include <iostream>
using namespace std;
int main()
{
int* arr = new int[5]{1, 2, 3, 4, 5};
for (int i = 0; i < 5; i++)
{
cout << arr[i] << " ";
}
cout << endl;
delete[] arr;
return 0;
}
Результат выполнения кода:
1 2 3 4 5