正在从子析构函数中删除父构造函数进行的分配

Deleting the allocations made by the parent constructor from child destructor

本文关键字:构造函数 分配 删除 析构函数      更新时间:2023-10-16

我有一个子构造函数,如下所示:

Child():Parent(){
}

所以子的析构函数是:

~Child(){
}

父母有这样的东西:

Parent(){
  abc.Construct();
} 
~Parent(){
  abc.Destruct();
}

如何确保在初始化期间(在Parent()构造函数中)进行的所有分配在销毁子项期间都被删除?

在Parent构造函数中所做的操作应该在Parent析构函数中撤消,而不是在Child析构函数。

Parent析构函数在销毁Child期间自动调用;就像在构造子对象的过程中自动调用Parent构造函数一样。

Child可以通过构造函数的初始化列表显式指定如何初始化Parent。这是必需的,因为Parent类不需要具有默认构造函数。在销毁子类的过程中,不需要显式指定如何销毁父类,因为每个类只有一个析构函数,而该析构函数不需要任何参数。

当一个对象被销毁时,所有完全构造的[sub-]对象的析构函数都会被调用(在构造过程中抛出异常时,关于完全构造的问题很重要;一旦构造完成,所有主体和对象本身都将被销毁)。也就是说,每个类只是照顾自己的资源,并将其子对象的销毁留给各自的析构函数。

除了对调用哪些析构函数非常精确之外,该语言对顺序也非常精确:析构函数的调用顺序与构造函数的调用顺序完全相反。也就是说,在Child类析构函数和Child的所有成员的析构函数完成之后,调用Parent类析构因子。

更大的问题是,如果删除指向基类的指针,会发生什么?我希望你的析构函数在基类中被声明为虚拟的。