1、右值构造函数
- 第一步:移动类成员
- 第二步:类成员恢复初始状态
class A {
public:
explicit A(A &&other) :
s(std::move(other.s)),
p(std::move(other.p)) {
other.p = nullptr;
}
private:
std::string s;
int *p{nullptr};
}
2、右值赋值运算符
- 第一步:判断是否是自身给自身赋值
- 第二步:清空自身
- 第三步:移动类成员
- 第四步:类成员恢复初始状态
class A {
public:
A operator=(A &&other) {
if (&other == this) {
return *this;
}
delete p;
s = std::move(other.s);
p = std::move(other.p);
other.p = nullptr;
}
private:
std::string s;
int *p{nullptr};
}