c++构造和析构能不能抛异常的问题!

来源:互联网 发布:数据库订单管理模板 编辑:程序博客网 时间:2024/05/16 14:31

总结:

1、析构函数中不允许抛异常。

2、构造函数中可以抛异常(但不建议)。构造函数中尽量不要抛异常或调用可能会抛异常的代码,如果必须要抛异常,要考虑处理内存泄漏。

之所以不建议抛异常是因为考虑到内存泄漏,因为构造函数抛异常会导致析构不能被调用;假如,设计者的设计思路是构造申请动态内存,析构释放动态内存。当构造函数中成功申请了内存,但在申请内存的下一段代码抛异常,这时析构不被调用也就不能释放内存,从而导致了内存泄漏。

非要抛异常的解决办法(针对上述例子):当申请动态内存(用P指代)成功后的下一段代码抛异常的时候释放主动释放该段内存(p)。

0 0
原创粉丝点击