在 C++ 中移动 assignment/construct 以获取包含引用的 class
Move assignment/construct in C++ for class containing reference
考虑
class A
{
array<double, 10> array;
double &a5;
public:
A():a5(array.at(5))
{}
};
感觉这个 class 上的移动赋值或移动构造函数会使成员 a5
无效。那是对的吗?有解决方法吗?
为避免 a5
变为无效的任何可能性,实施您自己的移动 constructor/assignment 到 copy/move 数组内容但不更改 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;
}
};
考虑
class A
{
array<double, 10> array;
double &a5;
public:
A():a5(array.at(5))
{}
};
感觉这个 class 上的移动赋值或移动构造函数会使成员 a5
无效。那是对的吗?有解决方法吗?
为避免 a5
变为无效的任何可能性,实施您自己的移动 constructor/assignment 到 copy/move 数组内容但不更改 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;
}
};