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

问题描述 投票:0回答:1

这个问题在这里已有答案:

我开始用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;
}

OUTPUT:

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

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

c++ class destructor
1个回答
1
投票

因为你没有通过引用或地址将dyna ob传递给neg,所以每次调用时都会创建并销毁带有本地范围的dyna。这会产生你看到的前3个Freeings。最后2个是oo2main被摧毁的时候。

© www.soinside.com 2019 - 2024. All rights reserved.