我有一个类 福 问题是,我正在创建一个函数operator+,将2个对象的两个值相加,当返回包含添加的新对象时,它会调用destructor,使堆中分配的内部变量释放。
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 "内存(分配),但问题是我不想在主函数中使用指针进行操作,而且仅仅为了一个简单的计算而将其存储在堆中并不好。
另一种方法(我正在实际使用)是通过创建一个 操作者+= 所以int main的代码是这样的。
foo A(2,2), B(2,2);
A.read();
B.read();
C = A;
C += A;
通过这个操作,我实际上是在修改C本身,之前,把所有的信息从A复制到C中。 这不是最好的方法,但这是我唯一能做到的。