为什么C ++析构函数会发生这种情况?

时间:2018-03-01 18:31:50

标签: c++ class destructor

我开始用c ++学习类,所以析构函数对我来说有点混乱。这是一个示例代码,我试图了解如何调用析构函数。

#include<bits/stdc++.h>
using namespace std;

class dyna
{
int *p;
public:
    dyna(int i);
    ~dyna() { delete(p); cout<<"Freeing"<<endl; }
    int get()
    {
    return *p;
    }
};

dyna::dyna(int i)
{
    p = new int;
    *p = i;
}

int neg(dyna ob)
{
    return -ob.get();
}

int main()
{
    dyna o(-10);
    cout<<o.get()<<endl;
    cout<<neg(o)<<endl;

    dyna o2(20);
    cout<<o2.get()<<endl;
    cout<<neg(o2)<<endl;

    cout<<o.get()<<endl;
    cout<<neg(o)<<endl;

    return 0;
}

输出:

-10
10
Freeing
20
-20
Freeing
20
-20
Freeing
Freeing
Freeing

我的问题是为什么它会显示最后3个“Freeing”?我首先理解它们超出了int neg(dyna ob)的范围。但为什么最后两个呢?请帮忙。

1 个答案:

答案 0 :(得分:1)

由于您没有通过引用或地址将dyna ob传递到neg,因此每次调用时都会创建并销毁具有本地范围的dyna。这会产生您看到的前3个Freeing。最后2个是在o中销毁o2main