#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 でまったく同じコードをコンパイルしようとすると、うまくいくので、これはこれら 2 つのコンパイラに関係していると推測しています。