exit与return的区别
来源:互联网 发布:巴西衰落知乎 编辑:程序博客网 时间:2024/04/29 06:55
exit比return更加“暴力”,因为它将绕过临时变量、局部变量的析构方法。这意味着,对于那种需要清理堆内存的对象来说,这将引起内存泄漏。虽然程序运行后关闭,泄漏的内存会被OS收回,不过析构方法中有些善后操作或许是必需的,绕过它会带来一些麻烦,比如保存一些数据到文件。
注意,exit绕过的仅仅是临时变量、局部变量的析构方法,全部变量、静态变量的析构方法仍然会被调用的。下面是一个例子:
// by btwsmileclass CSomething{public:// destructor~CSomething(){printf("Destructor called.\n");}};int main(int argc, _TCHAR* argv[]){static CSomething s_st;CSomething st;exit(100);//return 100;}
静态变量s_st的析构方法将被调用,但局部变量st的析构方法将被绕过,因此运行结果只有一条“Destructor called.”输出到屏幕。
如果换为return,s_st和st的析构方法都将被调用,因此运行结果将有两条“Destructor called.”输出到屏幕。
有的朋友可能已经注意到exit和return后的code了,之所以我使用比较大的数值100,是为了说明exit code的作用。需要澄清的是,return 100仍然会调用exit(100)的,只不过是由CRTstartup函数调用的而已。
exit code表示程序的返回状态,在命令解释器中,可通过查看%ERRORLEVEL%获得它。上面的示例程序编译链接后得到call_exit.exe,在命令解释器中运行它,然后查看%ERRORLEVEL%值,结果如图所示:
结论:
exit将绕过非全局区对象的析构方法,这可能引起某些问题。除非你很清楚自己想做什么,建议尽量使用温和的return,而非exit。
- exit 与 return 的区别
- return与exit的区别
- exit与return的区别
- exit 与 return 的区别!
- exit与return的区别
- exit 与return 的区别
- exit 与 return 的区别
- return与exit的区别
- exit与return的区别
- exit与return的区别
- return与exit()的区别
- exit与return区别
- exit与return区别
- exit与return区别
- system.exit()与return的区别
- c 中 exit 与 return 的区别
- exit函数与return的区别
- linux 中 return 与exit的区别
- c++ 最大/最小堆
- 在Linq中使用委托作为相等比较
- 求最长递减子序列LCS
- 黑马程序员_JavaSE基础03 之 运算符 流程控制结构
- 洗牌算法
- exit与return的区别
- eclipse新建android工程出现This template depends on Android Support Library问题
- java 反射
- WIN7+VS2008碰到LINK : fatal error LNK1000: Internal error during IncrBuildImage错误
- Android的Activity屏幕切换动画(二)-左右滑动深入与实战
- 餐桌上的“爱心菜”
- 数据结构之回溯法
- 书香与女人
- window对象的所有属性以及方法(不包括netsape)