Ниже представлен класс A, полный конструктора разных типов. Если я комментирую конструктор перемещения, то конструктор копирования вызывается дважды: один раз для передачи объекта функции fun по значению и другим путем возврата из той же функции.
Фрагмент кода
класс A {
int x;
public :
A() {
cout<<"Default Constructor\n";
}
A(A&& a) : x(a.x){
cout<<"Move Constructor\n";
a.x=0;
}
A(const A& a){
x=a.x;
cout<<"Copy Constructor\n";
}
A fun(A a){
return a;
}
};
int main() {
A a;
A b;
A c;
c=a.fun(b);
}
OUTPUT:
Default Constructor
Default Constructor
Default Constructor
Copy Constructor
Move Constructor
Однако, если присутствует конструктор перемещения, он вызывается вместо конструктора копирования. Может ли кто-нибудь сформулировать это с хорошим примером, так что я буду ясно понимать эту концепцию.
Буду признателен за вашу помощь. Спасибо.