|
![]() | 作者: 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号