Рубрики

Деструкторы в C ++

Что такое деструктор?
Деструктор — это функция-член, которая уничтожает или удаляет объект.

Когда вызывается деструктор?
Функция деструктора вызывается автоматически, когда объект выходит из области видимости:
(1) функция заканчивается
(2) программа заканчивается
(3) блок, содержащий локальные переменные, заканчивается
(4) оператор удаления называется
Чем деструкторы отличаются от обычной функции-члена?
Деструкторы имеют то же имя, что и класс, которому предшествует тильда (~)
Деструкторы не принимают никаких аргументов и ничего не возвращают

class String

{

private:

    char *s;

    int size;

public:

    String(char *); // конструктор

    ~String();      // деструктор

};
 

String::String(char *c)

{

    size = strlen(c);

    s = new char[size+1];

    strcpy(s,c);

}
 
String::~String()
{

    delete []s;

}

Может ли быть более одного деструктора в классе?
Нет, в классе может быть только один деструктор с именем класса, которому предшествует ~, без параметров и без возвращаемого типа.

Когда нам нужно написать пользовательский деструктор?
Если мы не напишем наш собственный деструктор в классе, компилятор создаст для нас деструктор по умолчанию. Деструктор по умолчанию работает нормально, если у нас нет динамически выделенной памяти или указателя в классе. Когда класс содержит указатель на память, выделенную в классе, мы должны написать деструктор, чтобы освободить память до того, как экземпляр класса будет уничтожен. Это должно быть сделано, чтобы избежать утечки памяти.

Может ли деструктор быть виртуальным?
Да, на самом деле, всегда полезно сделать виртуальные деструкторы в базовом классе, когда у нас есть виртуальная функция. Смотрите виртуальный деструктор для более подробной информации.

Вы можете пройти тест на деструкторы .

Статьи по Теме :
Конструкторы в C ++
Виртуальный деструктор
Чистый виртуальный деструктор в C ++

Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.

Рекомендуемые посты:

Деструкторы в C ++

0.00 (0%) 0 votes