У меня есть этот кусок кода C ++:
class Args {};
class MyClass {
public:
MyClass(Args& a) {}
MyClass(MyClass &&) = delete;
};
int main() {
Args a;
MyClass c1 = MyClass(a);
MyClass c2 = a;
MyClass c3(a);
return 0;
}
Это не компилируется, потому что при создании объектов c1
и c2
, по-видимому, используется конструктор перемещения класса:
error: use of deleted function ‘MyClass::MyClass(MyClass&&)’
Создается впечатление, что компилятор хочет создать временный объект и затем переместить его в c1
и c2
. Почему это происходит? Разве все три оператора не должны просто вызывать конструктор MyClass(Args& a)
?
С другой стороны, если я создаю конструктор перемещения, программа прекрасно компилируется, и конструктор перемещения никогда не вызывается !!!