御笔剑客 发表于 2022-3-5 23:11:01

关于std::move的一个问题

#include <bits/stdc++.h>

using namespace std;

class A {
public:
    int a, b;
    A(): a(0), b(0) {}
    A(int a, int b): a(a), b(b) {}
    void foo() {
      cout << a << " " << b << endl;
    }
};

int main()
{
    A a(5, 6);
    a.foo();
    A b = std::move(a);
    a.foo();
    b.foo();
    return 0;
}

按理说,这里对象a的数据应该移动到对象b上了才对,为什么对象a中的值仍为5和6, 而不是0和0呢?

人造人 发表于 2022-3-5 23:24:29

#include <bits/stdc++.h>

using namespace std;

class A {
public:
    int a, b;
    A(): a(0), b(0) {}
    A(int a, int b): a(a), b(b) {}
    A(A &&rhs) {
      this->a = rhs.a;
      this->b = rhs.b;
      rhs.a = rhs.b = 0;
    }
    void foo() { cout << a << " " << b << endl; }
};

int main() {
    A a(5, 6);
    a.foo();
    A b = std::move(a);
    a.foo();
    b.foo();
    return 0;
}

傻眼貓咪 发表于 2022-3-6 11:14:10

C++ 的拷贝构造函数真的很好玩,多样化。笔记中{:10_254:}
页: [1]
查看完整版本: 关于std::move的一个问题