2013-07-07 2 views
3

Я определяю destuctor базового класса как «Виртуальный». Например: -Виртуальный деструктор - C++

class Base 
{ 
public: 
    virtual ~Base() 
    { 
     cout << "Calling ~Base()" << endl; 
    } 
}; 

А также в производном классе тоже для примера: например: -

class Derived: public Base 
{ 
public: 
    virtual ~Derived() 
    { 
     cout << "Calling ~Derived()" << endl; 
    } 
}; 

Мой вопрос заключается в том, как оба равны destuctor по вызывается при удалении указателя базового класса, указывая на объект производного класса. ??????? thanks ..,

+2

@Jeffrey: неверно –

+0

@Jeffrey: не верно. –

ответ

1

Экземпляр класса построен в памяти как «здание», где основы являются высшими классами в иерархии. Деструкторы вызываются в порядке, противоположном конструкторам.

Значение:

Sub-Sub-класс -> Sub-Class -> Класс

деструкторы всегда называется. После того, как вы уничтожите часть объекта (подкласс), класс, из которого он получен, разрушен и так далее.

Причина, по которой вам не нужно называть «супер» деструктор из вашего подкласса, заключается в том, что деструктор должен всегда вызываться. Кроме того, в отличие от конструктора, где у вас может не быть конструктора по умолчанию (который принуждает вас явно вызвать супер-конструктор), это не так в деструкторах. У вас всегда есть один деструктор без аргументов, поэтому компилятор всегда может сказать, «какой» деструктор вызывать (поскольку таких вариантов не так много).

+0

я не получил ясно Ави ... позвольте мне объяснить с примерами .. спасибо .. –

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