朋友帮分析这个类里析构函数怎么没有调用啊

zhangyuan850 2016-12-20 09:13:39
我是新手,怎么这个类里构造函数和复制函数调用次数有,而析构函数运行次数却是0 啊。代码如下:
#include<iostream>
using namespace std;
int i=0;
int j=0;
int k=0;
class Cuboid
{
public:
Cuboid(double a,double b)
{
m_a=a;
m_b=b;
i++;
}
Cuboid( Cuboid &x)
{
m_a=x.m_a;
m_b=x.m_b;
j++;
}
void set(double a,double b)
{
m_a=a;
m_b=b;
}
double getArea()
{
m_TotalNum++;
return m_a * m_b ;
}
int getTotalNum()
{
return m_TotalNum;
}
~Cuboid()
{
k++;
}
private:
double m_a,m_b;
static int m_TotalNum;
};
int Cuboid::m_TotalNum=0;
int main()
{
Cuboid x(4,5);
cout<<"长方面积:"<<x.getArea()<<endl;
x.set(5,6);
cout<<"长方面积为:"<<x.getArea()<<endl;
Cuboid y(x);
cout<<"长方面积为:"<<y.getArea()<<endl;
Cuboid z(5,7);
cout<<"长方面积为:"<<z.getArea()<<endl;
cout<<"当前长方对象的数量为:"<<x.getTotalNum()<<endl;
cout<<"调用构造函数次数为:"<<i<<","<<"调用拷贝函数次数为:"<<j<<endl;
cout<<"调用析构函数次数为:"<<k<<endl;
return 0;
}
怎么运行结果却显示"k=0"啊,请高手帮分析一下。谢谢
...全文
337 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhangyuan850 2016-12-23
  • 打赏
  • 举报
回复
引用 5 楼 caozhy 的回复:
[quote=引用 4 楼 zhangyuan850 的回复:] [quote=引用 2 楼 caozhy 的回复:] 析构函数调用的时候可能无法正常输出。因为stdout已经销毁了。但是下断点看肯定执行了。
谢谢,设断点看了是调用了析构函数,但是作业要求显示调用次数,真让人头疼。[/quote] 你可以再写一个程序,不要放在main里,这样析构的时机不在主程序退出的时候就没问题了。[/quote] --------------------------------- 谢谢,把对象初始化语句放到另一个函数里,这样析构函数就工作了,在main函数里就显示调用次数了,谢谢。
threenewbee 2016-12-21
  • 打赏
  • 举报
回复
析构函数调用的时候可能无法正常输出。因为stdout已经销毁了。但是下断点看肯定执行了。
zhangyuan850 2016-12-21
  • 打赏
  • 举报
回复
引用 2 楼 caozhy 的回复:
析构函数调用的时候可能无法正常输出。因为stdout已经销毁了。但是下断点看肯定执行了。
谢谢,设断点看了是调用了析构函数,但是作业要求显示调用次数,真让人头疼。
zhangyuan850 2016-12-21
  • 打赏
  • 举报
回复
引用 1 楼 shingoscar 的回复:
这种代码,析构函数都是在return之后执行的 换成这样才行
Cuboid* x = new Cuboid(4,5);
delete x;
谢谢
足球中国 2016-12-21
  • 打赏
  • 举报
回复
你老师是让明白是什么是堆什么是栈,通过析构函数可以比较容易看出来。
threenewbee 2016-12-21
  • 打赏
  • 举报
回复
引用 4 楼 zhangyuan850 的回复:
[quote=引用 2 楼 caozhy 的回复:] 析构函数调用的时候可能无法正常输出。因为stdout已经销毁了。但是下断点看肯定执行了。
谢谢,设断点看了是调用了析构函数,但是作业要求显示调用次数,真让人头疼。[/quote] 你可以再写一个程序,不要放在main里,这样析构的时机不在主程序退出的时候就没问题了。
Poopaye 2016-12-20
  • 打赏
  • 举报
回复
这种代码,析构函数都是在return之后执行的 换成这样才行
Cuboid* x = new Cuboid(4,5);
delete x;

7,540

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 VC.NET
社区管理员
  • VC.NET社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧