我有一个std::vector类似的课程
struct Mystruct
{
Mystruct(const std::vector<int>& w): v(w)
{
std::cout << "Copy constructor :" << v.at(0) << "\n";
}
Mystruct(const std::vector<int>&& w): v(w)
{
std::cout << "Move Constructor :" << v.at(0) << "\n";
}
private:
std::vector<int> v;
};
Run Code Online (Sandbox Code Playgroud)
我创建像这样的对象
int main()
{
auto x = std::vector<int> {1,2,3};
Mystruct M1(x);
Mystruct M2(std::vector<int> {3,2,1});
return 0;
}
Run Code Online (Sandbox Code Playgroud)
M1使用复制构造函数和M2使用"移动"构造函数构造,但是在gdb中运行时,两个分配都为v和w保留不同的地址,如果我在初始化列表中使用v(std :: move(w)),则会发生同样的情况.第二个构造函数.所以我猜两个人都在复制w的内容,这是正确的吗?如果是这种情况,我怎样才能移动w的内容而不是复制它们