Я пытаюсь установить перегруженный оператор '=' для пользовательского класса Array для практики, но, похоже, он вызывает ошибку во время выполнения.
class Array {
private:
static int numberOfElements; //class static variable
int size;
int* numbers;
public:
Array(int);
Array(const Array&);
~Array();
int getSize();
static int getNumberOfElements();
Array& operator =(const Array&);
};
Эта перегруженная операторная функция выдает правильный вывод, но с ошибкой времени выполнения:
Array& Array::operator =(const Array& newArray) {
numberOfElements = numberOfElements - size + newArray.size;
size = newArray.size;
for (int i = 0; i < size; i++)
numbers[i] = newArray.numbers[i];
return *this;
}
Раньше у меня было
Array& Array::operator =(const Array& newArray) {
delete[] numbers;
numberOfElements = numberOfElements - size + newArray.size;
size = newArray.size;
numbers = new int[size];
for (int i = 0; i < size; i++)
numbers[i] = newArray.numbers[i];
return *this;
}
, которое не создает среду выполнения, но создает массив, заполненный мусором. numberOfElements просто отслеживает общее количество элементов во всех массивах, и не должно быть фактором ошибки. Я уверен, что проблема заключается в выделении динамического c, но я не могу логически понять, почему он выбрасывает среду выполнения, если я перезаписываю исходный массив с помощью newArray, и почему последний заполняется мусором даже если для выделенного массива заданы элементы newArray.