나는 다음과 같은 코드가 있습니다 :소멸자가 두 번 호출되는 이유는 무엇입니까?
#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;
}
출력은 보여줍니다 예상대로
60 70
60 70
10 20
코드는 거의 작동합니다. 문제는 객체 a2
의 값을 두 번 인쇄합니다 ... 즉 소멸자가 두 번 호출된다는 것을 의미하지만 두 번 호출되는 이유는 무엇입니까?
'temp'도 객체라는 사실을 잊어 버렸습니다. –
@OliverCharlesworth 글쎄, 그건 아마 RVO거야. 그러나 'a1 + 50'에 의해 임시로 생성 된 것은 생략 할 수 없습니다. –