正如我在某些论坛上所读到的,当派生类对象被创建时,基类成员和方法在内存中分配了空间,但是没有特定的基类对象。
现在,当派生类对象超出范围时,为什么要首先调用派生类析构函数。在派生类析构函数不能在基类析构函数之后调用的情况下,编译器的约束是什么?
如果我对自己的理解有误,请纠正我。
最佳答案
创建派生类对象时,将有一个特定的基类对象(实际上是子对象)。即,当您创建派生对象时,基类ctor用于初始化派生对象内的基类subj-object,只有在完成后,派生类ctor才开始做它的事情,初始化添加到对象中的所有成员。派生类等
由于它是从基础构建到派生的,因此已从派生分解为基础。当派生的dtor结束执行时,仍然应该有一个完全有效的基础对象,等待基础dtor销毁它。但是,如果您尝试先销毁基础子对象,则在运行派生dtor时,您将不再拥有要销毁的dtor的有效派生对象。