У меня есть конструкторы копирования и конструкторы перемещения, определенные в классе Foo. При отладке я вхожу в f = CreateFoo(1, 1);
, и это приводит меня к Foo(Foo&& other) : Foo(other, 0) {}
. Следующий шаг приводит меня к Foo(Foo& other, int m) :x(other.x + m), y(other.y - m) {}
, который является конструктором копирования. Я делегирую конструктор перемещения, ожидаю, что он выполняет Foo(Foo&& other, int m) : x(std::move(other.x)), y(std::move(other.y))
. Я не понимаю почему? Кто-нибудь может мне помочь? Ниже приведена полная программа.
class Foo
{
public:
int x;
int y;
public:
Foo(int i, int j) : x(i), y(j) {}
Foo(Foo& other) : x(other.x), y(other.y) {}
Foo(Foo& other, int m) :x(other.x + m), y(other.y - m) {}
Foo(Foo&& other, int m) : x(std::move(other.x)), y(std::move(other.y))
{
x = x + m;
y = y - m;
}
Foo(Foo&& other) : Foo(other, 0) {}
Foo& operator=(const Foo& other) {
x = other.x;
y = other.y;
return *this;
}
Foo& operator=(Foo&& other)
{
x = std::move(other.x);
y = std::move(other.y);
return *this;
}
};
Foo CreateFoo(int x, int y)
{
Foo tmp(x, y);
return tmp;
}
int main()
{
Foo f(0, 0);
f = CreateFoo(1, 1);
system("pause");
return 0;
}