c++0.9-----c++ primer之noexcept解读

noexcept技术非常重要,奈何c++ primer第五版所讲得冗长,需要仔细琢磨才好理解,特此记录一下我的理解:

noexcept在第474页讲得较详细。

  作者的思路是:首先声明移动操作很少抛出异常,其次标准库容器抛出异常时对原容器对象毫无影响。

下面给出了两段详细解释:

  1.移动构造函数不分配内存,因此很少抛出异常。但是一旦它抛出异常,对移动源对象而言就是破坏性的。也就是说即使我花try/catch处理这个异常,已经晚了,它再也不是从前的那个它了。所以,后面得出结论。移动构造函数适合noexcept:要么它正常运行完,要么出错直接退出程序,不会进行异常处理。

  2.拷贝构造函数分配内存,经常抛出异常。但是看一看469页的reallocate成员就会知道,抛出异常时,旧内存还没有删掉旧元素空间。这个时候,使用异常处理try/catch可以恢复原来容器的状态,因此拷贝构造函数不用noexcept。

以上仅为个人观点。

原文地址:https://www.cnblogs.com/yulianggo/p/9394087.html