#c #class #destructor #dynamic-memory-allocation
Вопрос:
Этот код представляет собой определение класса массивов, которое использует динамическую память для выделения памяти. Команда ArrayClass temp(_size);
в методе operator выдает следующую ошибку во время выполнения.
Необработанное исключение в 0x7715C54F в ArrayClass.exe: Исключение Microsoft C : std::bad_array_new_length в ячейке памяти 0x0033FB10.
Если мы преобразуем эту команду в ArrayClass *temp = new ArrayClass(_size)
, никакой ошибки не произойдет. Но новый объект temp
, выделенный new
оператором, удален не будет. У кого-нибудь есть решение?
#include <iostream>
using namespace std;
class ArrayClass {
private:
int _size;
float* _ar;
public:
ArrayClass(const intamp; size) {
_size = size;
_ar = new float[_size];
}
~ArrayClass() {
delete[]_ar;
}
const ArrayClassamp; operator=(const ArrayClassamp; RightOperand) {
if (this != amp;RightOperand) {
if (this->_size != RightOperand._size) {
delete[] this->_ar;
this->_size = RightOperand._size;
this->_ar = new float[this->_size];
}
for (int i = 0; i < RightOperand._size; i )
{
this->_ar[i] = RightOperand._ar[i];
}
}
return *this;
}
const ArrayClassamp; operator (const ArrayClassamp; RightOperand) {
//*this RightOperand
if (this->_size != RightOperand._size) {
cout << "different Size";
exit(1);
}
ArrayClass temp(_size);
for (int i = 0; i < _size; i )
{
temp._ar[i] = this->_ar[i] RightOperand._ar[i];
}
return temp;
}
};
int main() {
ArrayClass x(5), y(5), z(5);
x = y;
z= x y;
return 0;
}
Комментарии:
1. Сразу очевидно, что правило трех не соблюдается, хотя это может быть не единственной проблемой с кодом и не непосредственной причиной сбоя.
2. Вы не можете вернуть ссылку на локальную переменную.
3. Tnx много для ваших решений