我有以下代码:
#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
的值两次......这意味着析构函数被调用两次......但为什么它被调用两次?
答案 0 :(得分:11)
在分配a2=a1+50
期间,分配了一个包含a1+50
的临时对象。
此对象在复制到a2
后立即销毁。
答案 1 :(得分:7)
因为您定义的operator+
返回一个随后分配给a2
的临时对象。临时和a2
都被销毁(语句末尾的临时,a2
末尾的main
),打印它们的值。
答案 2 :(得分:2)
替换
a2=a1+50;
只是
a1+50;
你会明白为什么。