构造,析构,异常处理
来源:互联网 发布:程序员看不懂英文文档 编辑:程序博客网 时间:2024/06/05 21:02
1.假设有class A,new一个A的时候,在A的构造函数中抛出异常,那么此次new动态申请的内存会自动释放掉么?
系统会选择operator new 对应的operator delete来释放内存,如果找不到对应的operator delete,则内存泄露。
(详见effective c++ item 52)
2.默认情况下,new A的时候,如果内存不足,则抛出std::bad_alloc异常。如果写成new (std::nothrow) A,则在内存不足的情况下返回NULL,但是如果A的构造函数中又动态分配了内存,而此时恰好内存不足,我们没有办法强迫A的构造函数中再次使用nothrw new。没有运用nowthrow 的必要。
3.不要在析构函数中抛出异常(effective c++ item 08, more effectice c++ item11)
一是因为析构抛出异常的话,被析构的对象就没有完全被析构,不彻底。
而是因为如果同时存在两个异常,程序将会有不确性的行为,一般是终止。
4.构造某类的对象的时候,如果基类或者成员类的构造函数抛出异常,则这些异常必定会再次被抛出去,不管派生类的构造函数有没有处理这些异常,见如下代码:
class T
{
public:
T()
{
throw 1;
}
};
class BB
{
public:
T t;//使用一般的对象
BB()
try
{
}
catch(...)
{
cout<<"catched "<<endl;
}
};
class CC
{
public:
T *p;//使用指针
CC()
try
: p(new T())
{
}
catch(...)
{
cout<<"catched"<<endl;
}
};
void main()
{
CC c;//此处抛出异常
}
5.构造函数中阻止资源泄露(more effective c++ item 10)
- 构造,析构,异常处理
- c++ exception:构造 析构 异常处理
- 构造函数中的异常处理
- 构造函数的异常处理
- 构造函数/析构函数中的异常处理
- C++中异常处理中的构造和析构
- Java的构造函数抛出异常如何处理?
- [C++]异常处理中的拷贝构造操作(copy constructor)
- C++ 构造/析构函数中的异常处理
- C++学习之构造函数中的异常处理
- C++ 构造/析构函数中的异常处理
- 软件构造 异常处理的5个建议
- 异常处理+异常+处理异常+自定义异常
- JAVA初入门——基本类型,类,构造函数,异常处理,IO,集合问题归纳
- C++异常处理catch()中变量析构与构造的奇怪问题
- C++异常处理catch()中变量析构与构造的奇怪问题
- 对C++中异常处理中的构造和析构的认识
- 异常和构造函数
- Mobile web中动态生成控件及事件的委托
- 转贴文章完成迁移
- 测试.......
- [open source] cilc发布
- Java调用Linux命令
- 构造,析构,异常处理
- 请大家见证一个奇迹```
- XDoclet 学习笔记
- XML的五种用途~
- Win2000移花接木两例
- 了解XML文档对象模型
- 暖夏
- 在Web Service调用程序
- 8月5日游成都武侯祠