C++

  1. 移动构造函数和移动赋值运算符、
    1. 主要解决程序书写时效率问题、
    2. 移动并非是将内存中的数据移动到另一个地址中去、而是只是改变数据的所有者、
    3. 拷贝构造函数是左值引用即一个 & 而移动构造函数是右值引用即 &&
    4. 移动构造函数和移动赋值函数应在移动后切断原对象和内存的关系、确保移动后原对象内容即使被销毁也不影响移动后的数据即 a移动到b 移动后 将a的内容销毁而b则不会受到任何影响、
  2. 移动构造函数、
    1. noexcept——作用是通知标准库、在使用noexcept的移动构造函数中不抛出异常、
    2. 目的是提高工作效率、只要是移动构造函数(和移动赋值运算符)均建议加上noexcept、
  3. 合成的移动操作、
    1. 有自己的拷贝构造函数、赋值运算符和析构函数编译器就不会自动合成移动构造函数和移动赋值运算符、
    2. 系统只能合成简单的移动构造函数和移动赋值运算符、
    3. 没有自己的移动构造函数和移动构造函数的话、系统会调用我们自己的拷贝函数和拷贝赋值运算符替代
    4. 只有一个类没有定义任何自己版本的拷贝构造函数成员、且类的每个非静态成员都可以移动时、编译器才会生成移动构造函数和移动赋值运算符、
      1. 可移动成员、
      2. 内置类型(整型、实性)可以移动、
      3. 类类型成员的话就需要移动操作相关的函数、便可以移动、
  4. 总结、
    1. 尽量使用移动构造函数和移动赋值运算符来替代拷贝函数和拷贝赋值符、
    2. 不抛出异常的移动函数和移动赋值符加上noexcept——能加则加、
    3. 被移动对象在移动完成后要指空(NULLPTR)、以便让被移动对象处于一种能被析构的状态、
posted on 2020-10-20 13:11  程耀辉  阅读(120)  评论(0编辑  收藏  举报