Вызывает ли удаление указатель на подкласс деструктор базового класса? - PullRequest
159 голосов
/ 24 марта 2009

У меня есть class A, который использует выделение кучи памяти для одного из своих полей. Класс A создается и сохраняется как поле указателя в другом классе (class B.

Когда я закончу с объектом класса B, я вызываю delete, который, я полагаю, вызывает деструктор ... Но разве это также вызывает деструктор класса A?

Edit:

Из ответов я беру это (пожалуйста, измените, если неверно):

  1. delete экземпляра B вызывает B :: ~ B ();
  2. который звонит A::~A();
  3. A::~A должен явно delete все выделенные в куче переменные-члены объекта A;
  4. Наконец, блок памяти, хранящий указанный экземпляр класса B, возвращается в кучу - когда использовалось new , он сначала выделял блок памяти в куче, затем вызывал конструкторы для его инициализации, теперь после всех деструкторы были вызваны для завершения объекта, блок, в котором находился объект, возвращается в кучу.

Ответы [ 11 ]

0 голосов
/ 24 марта 2009

Нет. указатель будет удален. Вы должны вызвать delete на A явным образом в деструкторе B.

...