Re: Вопрос новичка про виртуальный деструктор
От: _AK_ Россия  
Дата: 30.04.04 11:32
Оценка: +1
Здравствуйте, cppNewbie, Вы писали:

N>Если инициализировать указатель родительского класса адресом объекта дочернего класса и объявить в родительском классе деструктор виртуальным, то при "разрушении" дочернего объекта через этот указатель сначала выполнится деструктор дочернего класса, а потом деструктор родителя. То, что выполняется деструктор дочернего объекта — мне понятно, потому что мы объявили деструктор родителя виртуальным. Но почему выполняется деструктор родительского класса? Есть ли этому логичное объяснение или это нужно принять как данность? Ведь при выполнении метода через указатель или ссылку родительского типа, если одноименный метод в предке объявлен виртуальным, исполняется только один метод, тот, который принадлежит дочернему объекту.


N>Поделитесь, пожалуйста!


вот одно из логических оъяснений:


struct Parent
{
  Parent() : m_Pointer(new int) {}
  virtual ~Parent()
  {
    delete m_Pointer;
  }
  int* m_Pointer;
};

struct Child : Parent
{
};

int main()
{
  Parent* obj = new Child;
  delete obj; // <- если тут не вызовется деструктор класса Parent, то у нас будет mem-leak.
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.