#include <iostream>
using namespace std;
class Exem {
int *a;
public:
Exem() { a = new int; *a = 0; };
Exem (int x) { a = new int; *a = x; };
~Exem () { delete a; };
int f (void);
Exem operator+ (Exem);
};
int Exem::f (void) {
return *a * 2;
}
Exem Exem::operator+ (Exem nimda) {
Exem aux;
*aux.a = *a + *nimda.a;
return aux;
}
int main() {
Exem adabo(1);
Exem inakos(2);
adabo = adabo + inakos;
cout << adabo.f();
cin.get();
}
这是我的代码,一个用于展示问题的示例类。理论上,main() 的输出是“6”,但实际显示的只是无意义的数字。
这显然与类的析构函数有关,据我了解,它在 operator+ 函数结束时被调用得太早 - aux 在实际传递之前就丢失了。我得出这样的结论是因为 ~Exem() 在被注释时允许程序按预期执行。
我猜这与这两个编译器有关,因为当我尝试在 Embarcadero RAD Studio 中编译完全相同的代码时,它会起作用。