为什么析构函数被调用两次?

用户名

我有以下代码:

#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两次...这意味着析构函数被调用两次...但是为什么它被调用两次?

巴拉克的手

在分配期间,将分配a2=a1+50一个包含临时对象a1+50

复制到后,该对象将立即销毁a2

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章