”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > C++11 中何时自动生成移动构造函数和移动赋值运算符?

C++11 中何时自动生成移动构造函数和移动赋值运算符?

发布于2024-12-26
浏览:380

When Are Move Constructors and Move Assignment Operators Automatically Generated in C  11?

移动操作的自动生成

在 C 11 中,移动语义的引入提出了关于移动构造函数和移动赋值的情况的问题运算符是自动生成的。

在 C 11 下,移动操作不会像复制构造函数和复制赋值运算符那样自动生成。如果满足某些条件,编译器仅生成移动语义:

  • 不存在用户定义的复制构造函数或复制赋值运算符。 如果显式定义了这些成员中的任何一个,则不进行移动生成操作。
  • 未定义用户定义的析构函数。 定义析构函数会禁用 move 的生成语义。
  • 该类没有不可复制的成员。 如果类包含无法移动的成员,例如指向动态分配内存的指针,则不会生成移动操作。

理解这些规则有助于指导利用移动语义的类的实现。 Howard Hinnant 演示文稿中的表格提供了自动生成特殊成员的简要概述,包括移动操作:

声明复制构造函数复制赋值运算符移动构造函数和移动赋值运算符
已生成已生成未生成
复制构造函数否已生成已生成未生成
复制赋值运算符未生成未生成 未生成
移动构造函数未生成未生成未生成
移动赋值运算符未生成未生成未生成已生成
析构函数未生成未生成未生成
复制构造函数和复制赋值运算符未生成未生成已生成未生成
复制构造函数和移动构造函数未生成未生成未生成
复制构造函数和移动赋值运算符未生成未生成未生成
复制赋值运算符和移动构造函数未生成已生成未生成未生成已生成
复制赋值运算符和移动赋值运算符未生成未生成未生成
移动构造函数和析构函数不已生成未生成未生成
移动赋值运算符和析构函数未生成未生成未生成
复制构造函数和复制赋值运算符和移动构造函数未生成未生成未生成
复制构造函数和复制赋值运算符& 移动赋值运算符未生成未生成已生成未生成
复制构造函数&移动构造函数&移动赋值运算符未生成未生成生成
复制赋值运算符和移动构造函数& 移动赋值运算符未生成未生成已生成

通过认识这些规则,开发人员可以确保他们的类正确利用移动语义并实现最佳效率。

最新教程 更多>

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3