关于析构函数的调用问题:

xllfe 2002-04-23 02:27:23
书上说析构函数可以在下列两种情况被调用:
1。如果一个对象被定义在一个函数体内,则当这个函数结束时,则当这个函数结束时,该对象的析构函数就被自动调用
2。当一个对象使用new运算符被动态创建的,在使用delete运算符释放它时,delete将会自动调用析构函数。
一道例题:
#include <iostream.h>
#include "tdate1.h"
void main()
{
TDate1 today(1998,4,9),tomorrow(1998,4,10);
cout<<"todya is";
today.Print();
cout<<"tomorrow is";
tomorrow.Print();
}
class TDate1
{
public:
TDate1(int y,int m,int d);
~TDate1();
void Print();
private:
int year,month,day;
};
TDate1::TDate1(int y,int m,int d)
{
year=y;
month=m;
day=d;
cout<<"Constructor called.\n";
}
TDate1::~TDate1()
{
cout<<"Destructor called.\n";
}
void TDate1::Print()
{
cout<<year<<","<<month<<","<<day<<endl;
}
这道题调用析构函数应该属于自动调用析构函数的第一种情况,上机编译的时候出现了两次Destructor called.,即析构函数被调用了了两次,但怎么会被调用两次呢?因为对象是被定义在void main()这个函数内,这个函数只结束了一次呀!
出现了两次Constructor called.倒是可以理解,因为创建了两个对象,所以构造函数被调用了两次。
第二次调用析构函数是在什么时候?
...全文
48 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
girlsjja 2002-05-26
  • 打赏
  • 举报
回复
1
xllfe 2002-04-23
  • 打赏
  • 举报
回复
因为定义了两个对象,所以调用了两次析构函数,这个道理我知道
输出这两个Destructor called的时候是不是在tomorrow.Print之后输出的?
eion 2002-04-23
  • 打赏
  • 举报
回复
你把你的
TDate1::~TDate1()
{
cout<<"Destructor called.\n";
}
换成
TDate1::~TDate1()
{
cout<<"Destructor called.....";
Print();
}

看看结构就知道为什么是两次了

Toon 2002-04-23
  • 打赏
  • 举报
回复
同意上面的说法!
dajian2000 2002-04-23
  • 打赏
  • 举报
回复
创建两个对象,构造函数执行了两次,顺序是:today的构造函数,tomorrow的构造函数;
结束时,两个对象都要调用析构函数,顺序是:tomorrow的析构函数,today的析构函数;
fangrk 2002-04-23
  • 打赏
  • 举报
回复
产生几个对象,就会有几个对象解析。
构造和解析顺序相反
girlsjja 2002-04-23
  • 打赏
  • 举报
回复
main()函数结束了一次。
可在main()中,你建立了两个类对象(today,tomorrow),当函数结束时,两个对象都要被析构,所以就调用了两次析构函数。
一般说来,析构函数和构造函数的调用是针对单个对象的建立和撤销。
建立几个对象就需要调用几次。
sevecol 2002-04-23
  • 打赏
  • 举报
回复
两个对象,当然是两次构造和两次析构
prototype 2002-04-23
  • 打赏
  • 举报
回复
因为创建了两个对象, so you have to call dtor twice to destroy these 2 objects (each dtor call can only destroy 1 object).
twist 2002-04-23
  • 打赏
  • 举报
回复
有两个对象,就要调用两次析构函数。

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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