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