zoukankan      html  css  js  c++  java
  • 移动构造函数需要标记为noexcept的理解

    转自:https://www.jianshu.com/p/7d63991470a8,https://bbs.csdn.net/topics/392084964

    1.介绍

     C++primer p474

    上面提到在对vector进行push_back重新分配内存空间时,是将旧空间移动到新内存的,但移动过程中有两种情况:一切正常,那么移动成功;抛出异常,vector内的元素会发生改变,导致程序错误。而针对拷贝构造函数也有两种情况:一切正常,那么移动成功;抛出异常,旧元素没有被影响,因为是在新空间上操作的,所以vector内的元素也不会发生改变。

    针对移动构造函数可能导致错误的情况的解决办法是:声明它为noexcept的,一旦抛出了异常,那么编译器会调用std::terminate()函数中断程序执行。直接结束程序,保证了安全性。

    2.例子

    https://blog.csdn.net/craftsman1970/article/details/81104760

    将这个类的移动构造函数被声明为noexcept,但仍然throw了异常,结果:

     程序会直接退出,不会执行后续的代码了。

  • 相关阅读:
    SpringBoot详解(二)——
    SpringBoot详解(一)——
    数据库三大范式
    Mysql备份
    mysql索引
    mysql事务
    几种数据库查找的案例
    点击加载更多
    layer、弹出框
    验证码倒计时
  • 原文地址:https://www.cnblogs.com/BlueBlueSea/p/14474929.html
Copyright © 2011-2022 走看看