C++中的异常安全、以及copy_and_swap
来源:互联网 发布:ubuntu怎么查看分区 编辑:程序博客网 时间:2024/06/05 13:32
参考effective c++条款29可知,C++中的异常安全提供以下三个保证之一:
- 基本承诺: 如果异常被抛出,应该保证函数中的状态还是可控的,也就是说当前函数内没有任何对象或者数据结构被破坏,仍然是合法的状态。
- 强烈保证: 如果异常被抛出,函数的内部各个状态应该和发生异常之前的状态相同(类似于回滚了状态);
- 不抛掷异常保证: 该函数不发生异常。
其中强烈保证往往能够通过copy_and_swap 实现,但他并非对所有函数都有意义或者说对所有函数都能实现。
于是我们从copy_and_swap开始聊起。
通常来说异常安全有两个目标:
不泄露任何资源。这个通过RAII可以做到。
不破坏任何数据结构。
所谓copy and swap策略就是先对需要修改的对象做出一份副本,这个副本的构造使用RAII以确保不会资源泄露,在副本上完成所需的修改,如果修改过程中出现异常,原对象仍保持不变。修改完成后,再通过non-throwing swap将副本与原对象交换。
class String{ char * str; public: String & operator=(const String & s) { String temp(s); // RAII temp.swap(*this); // Non-throwing swap return *this; } void swap(String & s) throw() // Non-throwing swap的实现 { std::swap(this->str, s.str); }};
0 0
- C++中的异常安全、以及copy_and_swap
- 【c++】异常安全深赋值
- c#中的异常处理
- Objective-C中的异常
- C语言中的异常
- C++/CLI中的安全编码
- objective-c中的异常处理
- C语言中的异常处理
- C语言中的异常处理
- C语言中的异常处理
- C语言中的异常处理
- C语言中的异常处理
- C语言中的异常处理
- C语言中的异常处理
- java中的常见异常以及处理
- 异常安全
- C++中的异常处理机制以及异常规范
- 关于C++VS2013中的安全的问题
- 七、数据处理函数
- SPSS 数据编辑器界面 度量 名义 序号 标签
- MYSQL下载教程
- 【Java】Calendar类
- java多线程学习7-线程安全问题
- C++中的异常安全、以及copy_and_swap
- 4.8胡策Problem 1 数学
- 【callback】js回调函数示例
- 多态
- Redis缓存技术学习系列之事务处理
- 测试C程序运行时间
- 统计整数位数
- win10环境下在android studio的模拟器中运行react native。
- sizeof(C# 参考)