我在接受的答案中读到:
[a] 不会为显式声明移动构造函数或移动赋值运算符的类生成复制构造函数和复制赋值运算符
我确实注意到(g++ 4.7.2),如果你定义了一个移动构造函数,它将与例如 一起使用push_back()
,而如果你所做的只是= delete
复制构造函数,你不会得到一个隐式移动构造函数——你会得到一个错误。 [...这让我想知道如果您没有明确执行任何操作,实际使用的是哪个(移动或复制)...]
但是,此在线参考并没有明确承诺在定义移动构造函数时不会隐式定义复制构造函数。
所以我的问题是,标准是否保证了第一个报价(包括"or")?对于一些需要显式析构函数的类,我更喜欢仅使用移动构造函数和(删除的)移动运算符来完成“五规则”,并依赖未定义的隐式复制方法。如果我不能依赖它,那么我将不得不明确地指出=delete
它们——但这是很多潜在的冗余内容。