析构函数不能抛出异常
来源:互联网 发布:语音群呼软件 编辑:程序博客网 时间:2024/04/30 12:36
1、构造函数可以抛出异常。
2、c++标准指明析构函数不能、也不应该抛出异常。
more effective c++关于第2点提出两点理由:
1)如果析构函数抛出异常,则异常点之后的程序不会执行,如果析构函数在异常点之后执行了某些必要的动作比如释放某些资源,则这些动作不会执行,会造成诸如资源泄漏的问题。
2)通常异常发生时,c++的机制会调用已经构造对象的析构函数来释放资源,此时若析构函数本身也抛出异常,则前一个异常尚未处理,又有新的异常,会造成程序崩溃的问题。
解决办法:
1)永远不要在析构函数抛出异常。
2)通常第一点有时候不能保证。可以采取如下的方法:
~ClassName()
{
try{
do_something();
}
catch(){ //这里可以什么都不做,只是保证catch块的程序抛出的异常不会被扔出析构函数之外。
}
}
- 析构函数不能抛出异常
- 为什么析构函数不能抛出异常
- 析构函数不能抛出异常
- 析构函数不能抛出异常
- 析构函数不能抛出异常
- 不能在析构函数里面抛出异常
- 不能在析构函数里面抛出异常
- 不能在析构函数里面抛出异常
- 不能在析构函数里面抛出异常
- 不能在析构函数里面抛出异常
- 不能在析构函数里面抛出异常
- 不能在析构函数里面抛出异常
- C++ 为什么析构函数不能抛出异常问题
- 不能在析构函数里面抛出异常
- C++类的析构函数不能抛出异常
- 析构函数中不能抛出异常的原因
- C++ 为什么析构函数不能抛出异常
- 析构函数抛出异常
- 动态sql语句基本语法
- VoIP基本原理与发展历程(2)
- CISCO路由器限速方法
- Oracle重做日志文件
- java学习过程
- 析构函数不能抛出异常
- 我的新博客的地址cnblogs
- 微软的XML解析器
- VoIP技术(1)--RTP/RTCP/SRTP语音传输技术
- VoIP技术(2)--语音编码算法-1
- [IM002] [Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序
- Java排序算法
- VC pro*C oracle编程配置
- 黑莓BES功能锁