Применение виртуального деструктора в C++

Виртуальный деструктор в C++ необходим для правильного освобождения ресурсов и корректного разрушения объектов в иерархии классов, когда используются указатели на базовый класс. Когда вы работаете с полиморфизмом (например, когда у вас есть указатель на базовый класс, который указывает на объект производного класса), важно, чтобы при удалении объекта через указатель на базовый класс вы вызывали деструктор производного класса. Если деструктор базового класса не является виртуальным, то будет вызван только деструктор базового класса, а деструктор производного класса не будет вызван. Это может привести к утечкам памяти или некорректному освобождению ресурсов.

Пример

 
#include <iostream>
using namespace std;

class Base
{
public:
	Base();
	virtual ~Base();

private:

};

Base::Base()
{
	cout << "Constructor Base" << endl;
}

Base::~Base()
{
	cout << "Destructor Base" << endl;
}

class Derived : public Base {
public:
	Derived();
	~Derived();
};

Derived::Derived() {
	cout << "Constructor Derived" << endl;
}
Derived::~Derived() {
	cout << "Destructor Derived" << endl;
}



int main()
{
	Base *base = new Derived();
	delete base;
	return 0;
}

Вывод программы
Constructor Base
Constructor Derived
Destructor Derived
Destructor Base

Если бы деструктор Base не был виртуальным, результатом выполнения программы было бы:
Constructor Base
Constructor Derived
Destructor Base

Использование виртуального деструктора — это помогает избежать утечек памяти и гарантирует, что все ресурсы будут корректно освобождены при удалении объектов.

79

Leave a Reply

Ваш адрес email не будет опубликован.