Что такое использование написания виртуального деструктора в C++, например:Каково использование виртуального деструктора?
class CMyObject
{
CMyObject(void) {};
virtual ~CMyObject(void) {};
}
Что такое использование написания виртуального деструктора в C++, например:Каково использование виртуального деструктора?
class CMyObject
{
CMyObject(void) {};
virtual ~CMyObject(void) {};
}
Так что вы можете иметь массив объектов CMyObject
подклассов разного размера (разрушенный и перераспределен) должным образом.
Виртуальный деструктор позволяет подклассу CMyObject
переопределить ~CMyObject(void)
и правильно очистить любые дополнительные свойства, которыми он владеет.
Например, если вы расширяете CMyObject, чтобы иметь указатель на некоторый массив, и вы выделяете память для этого массива, вы должны очистить его в деструкторе подкласса, поскольку он не будет заботиться деструктором суперкласса (CMyObject).
Простой пример:
class Foo {};
class Bar : Foo {};
Foo * obj = new Bar();
delete obj;
В этой ситуации, без виртуального деструктора в Foo, деструктор Bar не будет называться, и это серьезная проблема.
Итак, если для CMyObject нет производного класса, и я всегда убедитесь, что CMyObject * p и p = новый CMyObject, затем объявите деструктор, поскольку NON virtual в порядке? – alancc
@ user2704265 Да, это правда. Правилом большого пальца является объявление виртуального dtor для интерфейсов. – Bogdan
Возможный дубликат [Когда использовать виртуальные деструкторы?] (Http://stackoverflow.com/questions/461203/when-to-use-virtual-destructors) – songyuanyao