2014-02-14 5 views
2

Что такое использование написания виртуального деструктора в C++, например:Каково использование виртуального деструктора?

class CMyObject 
{ 
    CMyObject(void) {}; 
    virtual ~CMyObject(void) {}; 
} 
+0

Возможный дубликат [Когда использовать виртуальные деструкторы?] (Http://stackoverflow.com/questions/461203/when-to-use-virtual-destructors) – songyuanyao

ответ

1

Так что вы можете иметь массив объектов CMyObject подклассов разного размера (разрушенный и перераспределен) должным образом.

1

Виртуальный деструктор позволяет подклассу CMyObject переопределить ~CMyObject(void) и правильно очистить любые дополнительные свойства, которыми он владеет.

Например, если вы расширяете CMyObject, чтобы иметь указатель на некоторый массив, и вы выделяете память для этого массива, вы должны очистить его в деструкторе подкласса, поскольку он не будет заботиться деструктором суперкласса (CMyObject).

1

Простой пример:

class Foo {}; 
class Bar : Foo {}; 

Foo * obj = new Bar(); 
delete obj; 

В этой ситуации, без виртуального деструктора в Foo, деструктор Bar не будет называться, и это серьезная проблема.

+0

Итак, если для CMyObject нет производного класса, и я всегда убедитесь, что CMyObject * p и p = новый CMyObject, затем объявите деструктор, поскольку NON virtual в порядке? – alancc

+0

@ user2704265 Да, это правда. Правилом большого пальца является объявление виртуального dtor для интерфейсов. – Bogdan

Смежные вопросы