C++的异常探讨
来源:互联网 发布:bayer转rgb算法 编辑:程序博客网 时间:2024/06/18 01:32
前提:对象拥有权不转移
重要标准:构造函数(完整的一个构造,如果是两阶段构造的话,要包括第二阶段)与析构函数必须让内存归零。
Symbian的二阶段构造,通过清理栈来防止ML
1. 外围对象用NewL/NewLC产生的
2. 外围对象是栈中的对象,注意嵌套的所有必须提供类似于close/release/delete的方法,防止ML(基类要Delete,包含对象要Delete,注意:Delete必须像析构函数一样,从派生类递归完成到最后的基类) // error information !!!
3. R类通常析构并不会close它自己,所以R类栈对象也要close push一下
4. 资源受限设备不适合把大对象放在栈上
标准C++的异常,满足三点就没有ML了
1. New表达式(C++中的New表达式实际上是两个阶段,首先是执行New函数分配内存,其次执行构造函数)抛出异常,抛出点不会造成内存泄露,编译器和程序员保证
2. 栈对象因为会自动调用析构,编译器保证没有内存泄露
3. 堆对象产生销毁,程序员保证没有内存泄露
a. 分配内存时抛出异常,自然没有内存泄露
b. 所有构造函数内部抛出异常必须不能产生内存泄露,这需要编译器,生成主动调用基类的析构和包含对象的析构以及栈对象的析构的代码。所以程序员只要负责好堆对象即可
构造函数抛出异常时不需要也不会调用它对应的析构函数的,所以常使用智能指针
可以通过递归的方法证明没有ML
先证明简单类不存在ML,再证明复合类(多继承,包含)也不存在ML
- C++的异常探讨
- 程序设计语言的异常处理机制探讨
- java中异常的小探讨
- PL/SQL的异常处理机制的初步探讨
- PL/SQL的异常处理机制的初步探讨
- C++的异常处理机制及其捕获方式的探讨
- 异常使用方法探讨
- mvc 异常处理探讨
- Java异常探讨
- C语言的代码规范探讨
- 一 道C语言试题的探讨
- 关于c 实现希望提高效率的探讨
- Java替代C语言的可能性探讨
- Objective-C 【NSFileManager 的用法深入探讨】
- 关于C++异常抛出指针问题的探讨
- 【大牛经验】探讨Java的异常与错误处理
- C#datagridview_selectionchanged的异常
- C语言.h和.c的理解与探讨
- 如何在VC中嵌入IE
- asdfasdffffffffffffffffffffffffffffffffffffffffffffffffff
- eclipse 又一次把我的修改还原到上一次的状态
- 第21讲 远程共享对象
- myEclipse 不编译,一般是和lib有关系
- C++的异常探讨
- 第22讲 远程调用
- 树欲静而风不止,子欲养而亲不待
- HTTP请求:GET与POST方法的区别
- Design Process and Scope in Mobile Client team
- 也谈把程序写好 —— 一点初级程序员的鄙见
- SQLServer 查询数据库每个表占用空间的存储过程
- SQL PLUS命令集合(有用)
- 第23讲 套接字示例