Ich habe den folgenden Code:Warum Destruktor wird zweimal aufgerufen?
#include <cstdio>
#include <iostream>
using namespace std;
class A
{
int a, b;
public:
A() : A(5, 7) {}
A(int i, int j)
{
a = i;
b = j;
}
A operator+(int x)
{
A temp;
temp.a = a + x;
temp.b = b + x;
return temp;
}
~A() { cout << a << " " << b << endl; }
};
int main()
{
A a1(10, 20), a2;
a2 = a1 + 50;
}
Ausgabe zeigt es:
60 70
60 70
10 20
Der Code funktioniert fast wie erwartet. Das Problem ist, es druckt die Werte des Objekts a2
zweimal ... das heißt der Destruktor wird zweimal aufgerufen ... aber warum es zweimal aufgerufen wird?
Sie haben vergessen, dass 'temp' auch ein Objekt ist. –
@OliverCharlesworth Nun, das ist wahrscheinlich RVO'd. Aber das von 'a1 + 50' erstellte temporäre Element kann nicht entfernt werden. –