【发布时间】:2020-10-14 07:09:34
【问题描述】:
考虑以下类。如果我自己实现移动构造函数如下,为什么 bar 成员 b 没有被移动而是被复制?但是如果我使用默认的移动构造函数,那么b 会被移动。为什么b(rhs.b) 不调用bar(bar&&)?
我使用带有 --std=c++11 的 g++ 9.2.1。
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);
【问题讨论】:
标签: c++ c++11 rvalue lvalue move-constructor