今天我遇到了一个以下布局的类(c++14)
class A {
//ctor
A(..some specific parameter) :..init some members .. {};
//copy ctor
A(A const&) = delete;
//copy assign op
A& operator=(A const&) = delete;
//move operator
A(A&&) = default;
//move assign op
A& operator=(A&&) = delete;
//dtor
~A() = default;
}
创建默认移动构造函数但删除移动赋值运算符的意图是什么?使用该类会有什么影响/限制?
更新: 我不能分享类的细节,但评论和答案指向了正确的方向,这完全是关于资源分配和初始化。 非常感谢大家 - 你们让我的一天!!!
const
成员变量,那么移动构造函数可以(必须)初始化它,但移动赋值不可能(因为它可能会尝试覆盖const
成员变量)。 (复制构造函数与复制赋值也是如此。)我在您公开的示例代码中没有看到任何const
成员变量。所以,这只是一个猜测... - Scheff's Catconst
成员变量-它可能会将move
降级为copy
,但这不一定是问题。)一旦实例被初始化,您可以将其删除或移动到另一个实例,但不能进行其他操作。资源管理是此类的一个用例。(如果您拼出RAII,这就有意义了。);-) - Scheff's Cat