我知道C++中的移动语义和移动构造函数,但是我有一些困惑:
class Derived: public Base {
std::vector<int> vec;
std::string name;
// ...
public:
// ...
// move semantics
Derived(Derived&& x) // rvalues bind here
: Base(std::move(x)),
vec(std::move(x.vec)),
name(std::move(x.name)) { }
Derived& operator=(Derived&& x) // rvalues bind here
{
Base::operator=(std::move(x));
vec = std::move(x.vec);
name = std::move(x.name);
return *this;
}
// ...
};
移动构造函数Base(std::move(x))将x转换为右值引用,那么vec(std::move(x.vec))是如何操作的呢? x是否仍然存在?