编译器不应该为声明析构函数或复制操作(即复制构造函数/赋值)的类合成移动操作的规则是有意义的.毕竟,通过宣布这些操作,该课程承认它需要做一些自定义簿记.
但是,当类将析构函数或复制操作定义为=default?时,这种推理不适用?那么这种情况不应该是规则的例外吗?
编辑:我可能想要将析构函数定义为=default但不是其他特殊操作的一个原因是当我需要基类的虚拟析构函数时,所以我被迫定义一个使其成为虚拟的.
我认为部分原因是,如果您编写了默认析构函数,那么您已经在编写(至少)C++11,因此您没有理由不能编写默认移动构造函数和移动赋值操作员。
该规则可防止 C++11 之前编写的类被默默地赋予可能破坏类不变量的移动语义。如果该类不是 C++11 之前的类,那么您可以明确决定是否要移动语义并使用=default.
| 归档时间: |
|
| 查看次数: |
344 次 |
| 最近记录: |