
| 
 | 
|  | 作者: 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号