从子析构函数中删除父构造函数所做的分配

时间:2013-11-19 23:36:55

标签: c++ inheritance destructor

我有一个像这样的子构造函数:

Child():Parent(){

}

所以孩子的析构函数是:

~Child(){

}

父母有类似的东西:

Parent(){
  abc.Construct();
} 

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

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

3 个答案:

答案 0 :(得分:1)

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

在销毁Child时会自动调用Parent析构函数;就像在构造孩子时自动调用Parent构造函数一样。

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

答案 1 :(得分:0)

当一个物体被摧毁时,所有完整构造的[子]物体的析构物被调用(在施工期间抛出异常时,关于完整施工的问题很重要;一旦施工完成,所有物体和物体本身都将被摧毁)。也就是说,每个类只关注自己的资源,并将其子对象的破坏留给各自的析构函数。

此外,对于调用哪些析构函数非常精确,语言对于顺序也非常精确:析构函数的调用与构造函数的调用完全相反。也就是说,在Parent类析构函数之后调用Child类析构函数,并且Child成员的所有析构函数都已完成。

答案 2 :(得分:0)

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

相关问题