【发布时间】:2018-03-01 18:31:50
【问题描述】:
我开始学习 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 个“释放”?我首先了解他们超出了 int neg(dyna ob) 的范围。但是为什么最后两个呢?请帮忙。
【问题讨论】:
-
我希望析构函数执行 5 次。您有 2 个对象和 3 个临时对象。
-
您的“neg(dyna ob)”函数是按值传递的,因此它会创建对象的副本。尝试“neg(const dyna &ob)”通过引用传递。
-
按值传递将创建一个临时对象,因此会调用构造函数/析构函数。
标签: c++ class destructor