这个问题在这里已有答案:
我开始用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)
的范围。但为什么最后两个呢?请帮忙。
因为你没有通过引用或地址将dyna ob
传递给neg
,所以每次调用时都会创建并销毁带有本地范围的dyna
。这会产生你看到的前3个Freeing
s。最后2个是o
和o2
在main
被摧毁的时候。