我有一个像这样的子构造函数:
Child():Parent(){
}
所以孩子的析构函数是:
~Child(){
}
父母有类似的东西:
Parent(){
abc.Construct();
}
~Parent(){
abc.Destruct();
}
如何确保在销毁子进程期间删除初始化期间(在Parent()构造函数中)所做的所有分配?
答案 0 :(得分:1)
在Parent构造函数中完成的操作应该在Parent析构函数中撤消,而不是在Child析构函数中撤消。
在销毁Child时会自动调用Parent析构函数;就像在构造孩子时自动调用Parent构造函数一样。
Child可以通过构造函数的初始化列表明确指定如何初始化Parent。这是必需的,因为Parent类不需要具有默认构造函数。在销毁Child时,不需要明确指定如何销毁Parent,因为每个类只有一个析构函数,析构函数不需要任何参数。
答案 1 :(得分:0)
当一个物体被摧毁时,所有完整构造的[子]物体的析构物被调用(在施工期间抛出异常时,关于完整施工的问题很重要;一旦施工完成,所有物体和物体本身都将被摧毁)。也就是说,每个类只关注自己的资源,并将其子对象的破坏留给各自的析构函数。
此外,对于调用哪些析构函数非常精确,语言对于顺序也非常精确:析构函数的调用与构造函数的调用完全相反。也就是说,在Parent
类析构函数之后调用Child
类析构函数,并且Child
成员的所有析构函数都已完成。
答案 2 :(得分:0)
更大的问题是如果删除指向基类的指针会发生什么?我希望你的析构函数在基类中声明为虚拟。