移动操作的自动生成
在 C 11 中,移动语义的引入提出了关于移动构造函数和移动赋值的情况的问题运算符是自动生成的。
在 C 11 下,移动操作不会像复制构造函数和复制赋值运算符那样自动生成。如果满足某些条件,编译器仅生成移动语义:
理解这些规则有助于指导利用移动语义的类的实现。 Howard Hinnant 演示文稿中的表格提供了自动生成特殊成员的简要概述,包括移动操作:
声明 | 复制构造函数 | 复制赋值运算符 | 移动构造函数和移动赋值运算符 |
---|---|---|---|
无 | 已生成 | 已生成 | 未生成 |
复制构造函数 | 否已生成 | 已生成 | 未生成 |
复制赋值运算符 | 未生成 | 未生成 | 未生成 |
移动构造函数 | 未生成 | 未生成 | 未生成 |
移动赋值运算符 | 未生成 | 未生成 | 未生成已生成 |
析构函数 | 未生成 | 未生成 | 未生成 |
复制构造函数和复制赋值运算符 | 未生成 | 未生成已生成 | 未生成 |
复制构造函数和移动构造函数 | 未生成 | 未生成 | 未生成 |
复制构造函数和移动赋值运算符 | 未生成 | 未生成 | 未生成 |
复制赋值运算符和移动构造函数 | 未生成已生成 | 未生成 | 未生成已生成 |
复制赋值运算符和移动赋值运算符 | 未生成 | 未生成 | 未生成 |
移动构造函数和析构函数 | 不已生成 | 未生成 | 未生成 |
移动赋值运算符和析构函数 | 未生成 | 未生成 | 未生成 |
复制构造函数和复制赋值运算符和移动构造函数 | 未生成 | 未生成 | 未生成 |
复制构造函数和复制赋值运算符& 移动赋值运算符 | 未生成 | 未生成已生成 | 未生成 |
复制构造函数&移动构造函数&移动赋值运算符 | 未生成 | 未生成 | 生成 |
复制赋值运算符和移动构造函数& 移动赋值运算符 | 未生成 | 未生成 | 已生成 |
通过认识这些规则,开发人员可以确保他们的类正确利用移动语义并实现最佳效率。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3