#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'이지만 실제 나타나는 모든 것은 무의미한 숫자입니다.Dev-C++ 및 코드 :: 블록에서 망가는 소멸자
이것은 분명히 클래스의 소멸자와 관련이 있습니다.이 소멸자는 내가 이해 한 것으로부터 연산자 + 함수의 끝에 너무 일찍 호출됩니다. 실제로는 전달되기 전에 잃게됩니다. ~ Exem()은 주석을 달았을 때 예상대로 프로그램을 실행할 수 있기 때문에 그러한 결론에 도달했습니다.
필자는 Embarcadero RAD Studio에서 똑같은 코드를 컴파일하려고했을 때이 두 컴파일러와 관련이 있다고 생각합니다.