Effective C++ Item 29 为”异常安全”而努力是值得的
来源:互联网 发布:淘宝上的whoo是真的吗 编辑:程序博客网 时间:2024/05/18 01:28
本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie
经验:异常安全函数即使发生异常也不会泄漏资源或允许任何数据结构败坏。这样的函数区分为三种
可能的保证:基本型-->发生异常,程序处于某个合法状态
强烈型-->发生异常,程序处于原先状态
不抛异常型-->承诺绝不抛出殿堂
示例:
class PrettyMenu{public://...void changeBackground(std::istream &imgSrc); //改变背景图像//...private:Mutex mutex; //互斥器Image *bgImage; //目前的背景图像int imageChanges;//背景图像被改变的次数};void PrettyMenu::changeBackground(std::istream &imgSrc){lock(&mutex);delte bgImage;++imageChanges;bgImage = new Image(imgSrc);unlock(&mutex);}
解析:
泄漏资源:new Image(imgSrc) 导致异常的话,互斥器就不会 unlock
数据败坏:new Image(imgSrc) 导致异常的话,bgImage指向一个已删除的对象,imageChanges 也已被累加
纠正:
class PrettyMenu{//...std::tr1::shared_ptr<Image> bgImage; //以对象管理资源//...};void PrettyMenu::changeBackground(std::istream &imgSrc){Lock ml(&mutex); // 以对象管理资源bgImage.reset(new Image(imgSrc)); // 以"new Image" 的执行结果设定 bgImage 内部指针++imageChanges;}
解析:
delte 只有 reset 函数内被使用, 而 shared_ptr::reset 函数只有在其参数被成功生成之后才会被调用。
//todo
0 0
- Effective C++ Item 29 为”异常安全”而努力是值得的
- 《Effective C++》学习笔记条款29 为“异常安全”而努力是值得的
- Effective C++:条款29:为“异常安全”而努力是值得的
- 读书笔记《Effective C++》条款29:为“异常安全”而努力是值得的
- C++之为“异常安全”而努力是值得的(29)---《Effective C++》
- 《Effective C++》读书笔记之item29:为“异常安全”而努力是值得的
- Effective 阅读笔记---条款29"为异常安全而努力是值得的"
- 条款29:为"异常安全"而努力是值得的
- 条款29:为"异常安全"而努力是值得的
- 条款29:为“异常安全”而努力是值得的
- 条款29:为“异常安全”而努力是值得的
- 条款29 为“异常安全”而努力是值得的
- 《Effect C++》学习------条款29:为“异常安全”而努力是值得的
- effective c++为异常安全而努力是值得的(1)
- 为“异常安全”而努力是值得的
- item29: 为“异常安全”而努力是值得的
- 读书笔记 effective c++ Item 29 为异常安全的代码而努力
- 读书笔记 effective c++ Item 29 为异常安全的代码而努力
- Debian卸载Orca Screen Reader
- HBase 各部件的作用
- java实现图片与base64字符串之间的转换
- 【Wireshark】抓包工具使用教程以及常用抓包规则
- orcad元件属性批量修改及BOM表
- Effective C++ Item 29 为”异常安全”而努力是值得的
- HBASE原理简述
- string.Format格式大全
- Hbase禁用自带ZooKeeper,使用已经安装的ZooKeeper
- linux中串口传输剔除错误数据的方法
- Windows进程间通信
- 软件测试技术---代码检查,走查与评审
- 数据库无法正常关闭的处理步骤
- [cocos2dx-lua]"Hello Lua"分析