Mam następujący kod:Dlaczego destruktor jest wywoływany dwa razy?
#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;
}
Wyjście to pokazuje:
60 70
60 70
10 20
Kod działa prawie jak oczekiwano. Problem polega na dwukrotnym wypisywaniu wartości obiektu a2
... co oznacza, że destruktor jest wywoływany dwa razy ... ale dlaczego jest wywoływany dwa razy?
Zapomniałeś, że 'temp' jest również obiektem. –
@OliverCharlesworth Cóż, to prawdopodobnie RVO. Ale tymczasowy stworzony przez 'a1 + 50' nie może zostać usunięty. –