MyTetra Share
Делитесь знаниями!
О, смотри-ка какое хорошее место. Дайте два!
Про нужность виртуального деструктора
12.02.2009
17:21
Текстовые метки: c++, виртуальный, деструктор
Раздел: Компьютер - Программирование - Язык C++

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


Обычным является использование виртуального деструктора в классах, имеющих виртуальные функции. Более того, gcc, например, выдаст вам предупреждение, если вы не сделаете виртуальным деструктор, объявив виртуальную функцию.


Часто можно встретить миф: «вирт деструктор нужен лишь в том случае, когда на деструктор классов-потомков возлагаются какие-то нестандартные функции, если деструктор потомка не отличается по функционалу от родителя, то делать его виртуальным нет особого смысла». Это может и будет работать «сейчас», но может сыграть злую шутку в будущем, да и в общем-то не очень верно.


Если деструктор не виртуальный, то будет вызван деструктор того типа, какой заявлен в указателе. В тоже время будет правильнее что для объектов потомков должны вызываться свои деструкторы. Просто стоит принять это как правило, иначе в будущем могут быть очень большие проблемы с отладкой непонятно почему текучих в плане памяти программ.


Пример определения виртуального деструктора:


class Record

{

public:

Record();

virtual ~Record();

...

};


Пример реализации виртуального деструктора (ничем не отличается от обычного деструктора):


Record::~Record()

{

...

}



Так же в этом разделе:
← Содержание ...
 
MyTetra Share v.0.35
Яндекс индекс цитирования