У меня есть класс Foo , у которого есть конструктор, который получает 2 целых числа и создает массив Dynami c в 2D в куче, а деструктор удаляет его. Проблема в том, что я создаю функцию operator +, которая добавляет два значения из 2 объектов, и при возврате нового объекта, содержащего добавление, он вызывает деструктор, делающий внутреннюю переменную, выделенную в куче, свободной.
class foo()
{
foo() { }
foo(int a, int b){ ... } // Allocate 2D array
~foo() { ... } // Deallocate 2D array
void read() { ... }
void operator=(foo& A) { .. }
foo operator+(foo& A)
{
foo ans(2,2);
// Perform logic to add *this obj with A
...
return ans;
}
}
int main()
{
foo A(2,2), B(2,2);
foo C;
A.read();
B.read();
C = A + B;
return 0;
}
Итак, когда вызывается A + B, вся операция завершается, но при возврате объекта он вызывает деструктор ans и удаляет всю сохраненную информацию.
Одним из способов решения этой проблемы было возвращение указателя в эту "ans" память (выделение ее), но проблема в том, что я не хочу работать с указателями в основной функции, и хранить его в куче только для простых вычислений нехорошо.
Другой способ (который я на самом деле использую) - создать оператор + = , чтобы код в int main получал вот так:
foo A(2,2), B(2,2);
A.read();
B.read();
C = A;
C += A;
С помощью этой операции я фактически изменяю сам C и ранее скопировал всю информацию из A в C. Не лучший способ, но это единственное, что мне удалось.