我开始用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)
的范围。但为什么最后两个呢?请帮忙。
答案 0 :(得分:1)
由于您没有通过引用或地址将dyna ob
传递到neg
,因此每次调用时都会创建并销毁具有本地范围的dyna
。这会产生您看到的前3个Freeing
。最后2个是在o
中销毁o2
和main
。