考虑
class A
{
array<double, 10> array;
double &a5;
public:
A():a5(array.at(5))
{}
};
感觉此类上的移动赋值或移动构造函数会使成员a5
无效。那是对的吗?有解决方法吗?
答案 0 :(得分:2)
为了避免a5
变为无效的可能性,请实现自己的移动构造函数/赋值来复制/移动数组内容但不要更改a5
,例如:
class A
{
std::array<double, 10> arr;
double &a5;
A()
: a5(arr[5])
{}
A(const A& src)
: arr(src.arr), a5(arr[5])
{}
A(A&& src)
: arr(std::move(src.arr)), a5(arr[5])
{}
A& operator=(const A& rhs)
{
if (this != &rhs)
arr = src.arr;
return *this;
}
A& operator=(A&& rhs)
{
std:swap(arr, src.arr);
return *this;
}
};