Я бы посмотрел на поведение встроенных типов.
При определении ваших собственных типов предпочтительно, чтобы операторы вели себя так же, как и встроенные типы. Это позволяет легко адаптировать ваши классы без необходимости углубляться в ваш код, чтобы понять, почему они ведут себя не так, как ожидалось.
Итак, если мы посмотрим на целые числа:
int main()
{
int x = 5;
int y = 6;
int z = 7;
(x = y) = z;
std::cout << x << " " << y << " " << z << "\n";
}
Это работает при неизменном y и назначении x 7. В вашем коде я бы ожидал, что ваш оператор присваивания будет работать так же. Стандартное определение оператора присваивания:
Array& Array::operator=(Array const& rhs)
{
/* STUFF */
return *this;
}
Должен делать это очень хорошо (при условии, что / * STUFF * / правильный).