论坛: 编程破解 标题: c++中的一个问题! 复制本贴地址    
作者: zhoen889 [zhoen889]    论坛用户   登录
最近我们c++考试,有一道题是这样的:#include<iostream.h>
class DATA
{
int a;
public:
DATA(int x)
{
a=x;
cout<<"Set up a="<<a<<endl;
}
~DATA()
{
cout<<"Destroy a="<<a<<endl;
}
};
void main()
{
DATA da(2);
DATA da1(3);
}
它的正确运行结果是:
Set up a=2
Set up a=3//这里是有区别的地方

Destroy a=3
Destroy a=2
其中~DATA(){}这个函数是c++中的一个扫尾的函数,即析构函数。
在书中是这样说的:
析构函数与构造函数在对象生成时相对应,专门用来在对象的生存期结束时候做善后工作的。
我不明白既然它是用来对象扫尾的,而da和da1是2个对象,为什么运行结果不是:
Set up a=2
Destroy a=2//这里是有区别的地方
Set up a=3
Destroy a=3






[此贴被 zhoen889(zhoen889) 在 12月05日15时19分 编辑过]

地主 发表时间: 12/05 15:37

回复: 286 [unique]   版主   登录
对象也是变量。对于一个函数来说,变量是存在栈里的。
相对于main()函数,da先入栈,da1后入栈。main函数在结束时会按栈操作处理两个析构函数,因此是da1的析构先运行,da后运行。



B1层 发表时间: 12/05 16:55

回复: zhoen889 [zhoen889]   论坛用户   登录
我知道了!多谢斑竹!!!

B2层 发表时间: 12/05 17:04

论坛: 编程破解

20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon

粤ICP备05087286号