我在这里的被接受的答案中读到:
对于一个明确声明了移动构造函数或移动赋值运算符的类,不会生成复制构造函数和复制赋值运算符。
我注意到(g++ 4.7.2),如果您定义了一个移动构造函数,它将与例如push_back()
一起使用,而如果您只是=delete
复制构造函数,则不会获得隐式移动构造函数 -- 您会收到错误。这让我想知道在没有做任何显式处理的情况下实际使用哪个(移动或复制)......
但是,这个在线参考并没有对于当您定义一个移动构造函数时不会隐含定义复制构造函数作出同样明确的承诺。
因此,我的问题是,第一段引用是否由标准(包括"或")保证? 对于一些需要明确析构函数的类,我更喜欢仅使用移动构造函数和(已删除的)移动运算符完成“五大规则”,并依赖于隐式复制方法不被定义。 如果我不能依赖它们,那么我将不得不显式地=delete
这些函数 -- 但这是很多可能是冗余的工作。