构造函数和析构函数中抛出异常
文章目录
- 1 构造函数中抛出异常
- 2 析构函数中的异常
1 构造函数中抛出异常
如果构造函数中抛出异常会发生什么情况?
构造函数中抛出异常:
- 构造过程立即停止。
- 当前对象无法生成。
- 析构函数不会被调用。
- 对象所占的空间立即收回。
工程中的建议:
- 不要在构造函数中抛出异常。
- 当构造函数可能产生异常时,使用二阶构造模式。
编程实验:构造函数中的异常
#include <iostream>
#include <string>using namespace std;class Test
{public:Test(){cout << "Test()" << endl;throw 0;}virtual ~Test(){cout << "~Test()" << endl;}
};int main(int argc, char *argv[])
{Test* p = reinterpret_cast<Test*>(1);try{p = new Test();}catch(...){cout << "Exception..." << endl;}cout << "p = " << p << endl;return 0;
}
Linux下可以使用如下工具判断是否有内存泄漏:
valgrind --tool=memcheck --leak-check=full ./a.out
2 析构函数中的异常
避免在析构函数中抛出异常!
析构函数的异常将导致:
- 对象所使用的资源无法完全释放。
- 可能导致terminate()多次被调用。
参考资料:
- C++深度解析教程
构造函数和析构函数中抛出异常相关推荐
- C++中构造函数和析构函数可以抛出异常吗?
C++中构造函数和析构函数可以抛出异常吗? 一. 析构函数 参照<Effective C++>中条款08:别让异常逃离析构函数. 总结如下: 1. 不要在析构函数中抛出异常!虽然C++ ...
- effective c++:virtual函数在构造函数和析构函数中的注意事项
effective c++:virtual函数在构造函数和析构函数中的注意事项 如不使用自动生成函数要明确拒绝 对于一个类,如果你没有声明,c++会自动生成一个构造函数,一个析构函数,一个copy构造 ...
- 构造函数 和 析构函数 能否抛出异常
构造函数和析构函数分别管理对象的建立和释放,负责对象的诞生和死亡的过程.当一个对象诞生时,构造函数负责创建并初始化对象的内部环境,包括分配内存.创建内部对象和打开相关的外部资源,等等.而当对象死亡时, ...
- C++对象模型8——构造函数和析构函数中对虚函数的调用、全局对象构造和析构、局部static数组的内存分配
一.构造函数和析构函数中对虚函数的调用 仍然以https://blog.csdn.net/Master_Cui/article/details/109957302中的代码为例 base3构造函数和析构 ...
- (c++)5.4构造函数和析构函数中调用虚函数
在构造函数和析构函数中调用虚函数时,采用静态联编(他们所调用的虚函数是自己类中定义的函数) 如果在自己类中没有实现这个虚函数,则调用的是基类中的虚函数,绝不会是任何在派生类中重定义的虚函数 //构造函 ...
- C++核心准则C.82:不要在构造函数或析构函数中调用虚函数
C.82: Don't call virtual functions in constructors and destructors C.82:不要在构造函数或析构函数中调用虚函数 Reason(原因 ...
- C++经验(四)-- 基类构造函数和析构函数中调用virtual虚函数?
class Base {public:Base();virtual void oneFunction() = 0;... };Base::Base() {...oneFunction(); }clas ...
- C++中最好不要在构造函数和析构函数中调用虚函数!!!
1.最好不要在基类和派生类的构造和析构函数中调用虚函数,不会出现多态性 实例如下: #include "iostream"using namespace std;class Bas ...
- C++学习笔记-----不要在构造函数和析构函数中调用虚函数
考虑下面的程序: #include <iostream> using namespace std;class Base { public:Base() { cout << &q ...
最新文章
- Application Desktop Toolbars 桌面工具栏
- JAVA struts2
- 上班族吐槽大集合:那些发生在公司的傻X奇遇
- http://w3cschool.codecloud.net/python/python-object.html?ref=myread
- HAProxy杂记(1)
- 【Processing-日常1】小圆碰撞
- cx_Oracle模块
- 获取电脑系统当前时间
- RAID卡的安装配置
- admin ajax,如何在FastAdmin中使用Ajax发送请求?
- 暖通空调材料进场如何验收?
- 智华计算机加密,智华天成V1.0计算机终端保密检查系统软件 国密装备目录**
- openstack 分布式路由器dvr
- cogs2790. mk和tree解题报告
- matlab中复华simpson,MATLAB Simpson的规则
- 07_LTP语言技术平台
- 关于AD与KiCad绘制PCB的一点看法
- 名片互赞软件(安卓版)
- 研华webaccess与西门子PLC以太网通讯配置
- R语言使用报错及处理总结(不断更新)