关于使用析构函数的几点注意事项

析构函数在C++中用于资源清理,应注意多态性和异常处理。多态基类的析构函数应为虚拟的,否则可能导致内存泄漏。析构函数不应抛出异常,以防止程序异常行为。同时,不应在构造或析构函数中调用虚函数,这可能导致预期之外的行为。解决方案可能包括使函数非虚拟或传递必要信息给构造函数。
摘要由CSDN通过智能技术生成

        析构函数为你提供了一种机制,可以让你在系统释放对象前做一些善后工作,如清理内存,释放空间等。但是在以下两个方面使用虚构函数时要尤为注意。

        1.  多态性

        具有多态性质的base classes的析构函数应该为virture,或者说任何带有virture函数的class都应该有virture析构函数。考虑下面的代码:

class A{
   A();
   ~A();
   ......
};

class B: public A{
   ......
};

int main(){
   B b;
   A* p = &b;
   ......
   delete p;
}
         如果以上代码出现在你的项目中,那么就会造成灾难性的后果。在上述代码中,B类的对象经由一个base class(A类)指针被删除,但是base class(A类)有个non-virture析构函数,这就导致其内的B类成分没有被销毁(声明于B类的成员变量),然而其base class成分(也就是A类这一部分)通常会被销毁,于是导致一个诡异的“局部销毁”对象。资源泄露、败坏数据结构等问题都会因此而产生。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值