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