delete C++ оператор освобождения памяти и спецификатор ограничения доступа

Оператор delete применяется для освобождения памяти выделенной оператором new или new [].
- На каждый оператор new должен идти оператор delete.
- На каждый оператор new [] должен идти оператор delete [].
- После удаления указателя им нельзя пользоваться, потому что эта память уже может использоваться другими переменными или программами и это может привести к логическим ошибка или падению программы. Иногда для определения что указатель был удален, ему присваивают значение nullptr.


#include <iostream>
using namespace std;

int main(void) {
    int* p = new int(3); // Создали указатель на int и присвоили ему значение 3
    cout << *p << endl;  //3 Вывели значение по адресу указателя
    delete p;            // Удалили указатель

    int *ar = new int[10]; // Создали указатель на int и присвоили ему значение 3
    cout << ar << endl;    // Вывели адрес указателя (массива)
    delete [] ar;          // Удалили массив. Если память выделяется через type[] то удаляется через delete []
    cout << ar[0] << endl;    // Вывели адрес указателя (массива)
}

Начиная с С++11 delete может применятся как спецификатор ограничения доступа к функциям и операторам класса.


#include <iostream>
using namespace std;

class Test{ // Класс Test
public:
    Test(){ // Конструктор без параметров
        cout << "Test()" << endl;   // Выведем надпись Test() при вызове конструктора
    }

    Test(int) = delete;     // Конструктор с параметром int запрещен для вызова спецификатором delete

    Test(float f){  // Конструктор с параметром типа float
        cout << "Test(" << f << ")" << endl;    // Выведем надпись Test(параметр) при вызове конструктора
    }
};

int main(void) {
    Test t1;        //Test()
    Test t2(1);     // Выдаст ошибку use of deleted function 'Test::Test(int)' так как конструктор с int имеет спецификатор delete
    Test t3(1.0f);  //Test(1)
}
2023-10-22



Понравилась страница?
Добавить в закладки
Или поделиться!

Связанные темы

Конструктор в C++. Конструктор копирования и оператор присваивания.
delete C++ оператор освобождения памяти и спецификатор ограничения доступа
explicit С++ запрет неявных преобразования при вызове конструктора
friend C++ дружественная функция имеющая доступ к закрытым членам класса
mutable C++ изменение членов константного объекта
new C++ динамическое выделение памяти
private С++, С++ приватные члены класса, С++ закрыты члены класса
protected C++ указание защищенных членов класса
public С++, С++ открытые члены класса
struct С++ структура
this C++ указатель на текущий объект класса
virtual C++ виртуальные функции