在 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;
    }
};