由于C++ 11在使用移动赋值操作符时,是否应该将我所有的数据(包括POD类型)都包含在内?我想这对下面的例子没有什么影响,但我想知道普遍接受的最佳做法是什么。C++移动赋值运算符:我想用POD类型使用std :: swap吗?
示例代码:
class a
{
double* m_d;
unsigned int n;
public:
/// Another question: Should this be a const reference return?
const a& operator=(a&& other)
{
std::swap(m_d, other.m_d); /// correct
std::swap(n, other.n); /// correct ?
/// or
// n = other.n;
// other.n = 0;
}
}
你可能想考虑形式的构造: - 即:有在n
或m_d
总是“有意义”或定义的值存储。
a() : m_d(nullptr), n(0)
{
}
为了您的评论的问题,它应该是一个'&运算符=(A &&等)' – Jarod42
你或许可以只使用'N = other.n',随着移动,从对象应处于有效状态留(该标准没有指定结束状态)。 – vsoftco
@vsoftco如果n是动态数组的大小,那么它应该设置为0或'other.n',具体取决于使用'm_d'完成的操作。 – juanchopanza