正在从子析构函数中删除父构造函数进行的分配
Deleting the allocations made by the parent constructor from child destructor
我有一个子构造函数,如下所示:
Child():Parent(){
}
所以子的析构函数是:
~Child(){
}
父母有这样的东西:
Parent(){
abc.Construct();
}
~Parent(){
abc.Destruct();
}
如何确保在初始化期间(在Parent()构造函数中)进行的所有分配在销毁子项期间都被删除?
在Parent构造函数中所做的操作应该在Parent析构函数中撤消,而不是在Child析构函数。
Parent析构函数在销毁Child期间自动调用;就像在构造子对象的过程中自动调用Parent构造函数一样。
Child可以通过构造函数的初始化列表显式指定如何初始化Parent。这是必需的,因为Parent类不需要具有默认构造函数。在销毁子类的过程中,不需要显式指定如何销毁父类,因为每个类只有一个析构函数,而该析构函数不需要任何参数。
当一个对象被销毁时,所有完全构造的[sub-]对象的析构函数都会被调用(在构造过程中抛出异常时,关于完全构造的问题很重要;一旦构造完成,所有主体和对象本身都将被销毁)。也就是说,每个类只是照顾自己的资源,并将其子对象的销毁留给各自的析构函数。
除了对调用哪些析构函数非常精确之外,该语言对顺序也非常精确:析构函数的调用顺序与构造函数的调用顺序完全相反。也就是说,在Child
类析构函数和Child
的所有成员的析构函数完成之后,调用Parent
类析构因子。
更大的问题是,如果删除指向基类的指针,会发生什么?我希望你的析构函数在基类中被声明为虚拟的。
相关文章:
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 具有自定义构造函数 (C++) 的类型的动态数组分配
- C 字符串在显式构造函数中分配值C++?
- 如何为 std::vector 分配内存,然后稍后为某些元素调用构造函数?
- 在构造函数中分配内存失败是如何冒泡的
- 当我尝试通过构造函数分配 char 数组时出现错误
- 如何使用函数(而不是构造函数)将派生类对象分配给基类指针
- 当设置对象等于另一个函数的返回值时,为什么要调用移动构造函数/分配
- 如何安全地释放构造函数分配的资源
- 是否可以在基类中删除复制和移动构造函数/分配运算符
- 如何在隐式复制构造函数/分配运算符中压制成员
- 使用超载构造函数分配
- 使用构造函数分配内存
- 如何使用复杂构造函数分配对象
- 将类构造函数分配给具有参数的新构造函数C++
- 在构造函数分配后更改vtable内存
- 在尝试使用 new 和 copy 构造函数分配内存时,在 '(' 令牌之前获取"预期的非限定 id"
- 为存储库构造函数分配内存
- 由c++中的双默认构造函数分配的值
- 将派生类构造函数分配给基类指针