异常安全的函数(方法)
来源:互联网 发布:mac上有啥游戏 编辑:程序博客网 时间:2024/06/06 21:41
所谓异常安全的函数是指:即便是在这个函数的调用过程中出现异常,也不会影响到重要的数据或状态。
【异常安全原则】:尽量把可能抛出异常的代码写在函数的最前面,让异常尽量早地抛出,在改变重要数据或状态之前抛出异常。
让我们来比较两段代码:
void f1()
{
importantData.Invalidate();
data = getNewData(); // An exception maybe thrown.
importantData.Set( data );
}
void f2()
{
data = getNewData(); // An exception maybe thrown.
importantData.Invalidate();
importantData .Set( data );
}
在f1()中,importantData的Invalidate发生在getNewData()之前,而后者可能会抛出一个异常,该异常在本函数中没有处理,意味着可能会在调用者的流程中处理。而调用者可能会轻描淡写的处理这个异常,甚至认为importantData没有发生任何变化,继续使用。但实际上它已经无效了,继续使用的结果可能会导致更多的异常出现。
在f2()中,异常在importantData的Invalidate之前就抛出了,如此即便有异常发生,但importantData并没有被改变,外部调用者仍然可以安全的使用它。
当然,我们可以在f1()中加入try …catch块,但这样做与f2相比,实在过于臃肿。就像下面这样:
void f1()
{
importantData.Invalidate();
try
{
data = getNewData(); // An exception maybe thrown.
}
Catch(…)
{
importantData.RestoreData();
}
importantData.Set( data );
}
- 异常安全的函数(方法)
- 编写异常安全的C++函数
- 异常安全的赋值运算符函数
- 程序员面试题精选(30):异常安全的赋值运算符重载函数
- C++析构函数的使用--异常安全
- 赋值运算符的重载函数,要求异常安全
- 异常安全的CMyString赋值运算符函数重载
- 异常安全的赋值运算符重载函数
- 安全的方法是使用GetSafeHwnd()函数
- 异常安全的复制构造函数和拷贝赋值运算符函数
- 赋值运算符函数异常安全
- C#匿名方法的应用二则–实现异常Retry机制和WinForm线程安全访问 (转帖)
- 异常安全--MFC框架的异常捕获
- 异常安全的智能指针
- c++对象的异常安全
- C++异常安全的思考
- 异常安全的C++类
- 异常安全的C++类
- 解决弹出OUTLOOK显示繁体中文乱码的问题
- C# 中如何自定义事件?
- 现代教育技术 第八次作业(第十五讲_教学目标的阐明第十六讲_教学策略)
- 使用C#在应用程序间发送消息
- 送好礼,学思科技术;迎奥运,庆瑞通十载!
- 异常安全的函数(方法)
- 08年的新房子。
- CSS的各种浏览器兼容一栏表
- ArcSDE Oracle的存储DBTune配置
- ls命令(列出所有子目录与文件)
- 反其道为之,as3加载flex的swf
- Java多线程设计模式-学习笔记-Produce/Consumer模式.
- URL重写问题
- socket编程原理