Рассмотрим следующие классы. Если я реализую конструктор перемещения самостоятельно, как показано ниже, почему элемент панели b
не перемещается, а копируется? Но если я использую конструктор перемещения по умолчанию, то b
перемещается. Почему b(rhs.b)
не звонит bar(bar&&)
?
Я использую g++ 9.2.1 с --std=c++11.
class bar {
public:
bar() { cout << "bar constructor" << endl; }
bar(const bar& rhs) { cout << "bar copy constructor" << endl; }
bar(bar&& rhs) { cout << "bar move constructor" << endl; }
};
class foo {
bar b;
public:
foo() { cout << "foo constructor" << endl; }
foo(const foo& rhs) { cout << "foo copy constructor" << endl; }
// foo(foo&& rhs) = default;
foo(foo&& rhs) : b(rhs.b) { cout << "foo move constructor" << endl; } // my version
// ^^^^^^^^
};
foo f;
foo g = std::move(f);