终止无尽的while循环

时间:2013-02-09 20:47:17

标签: c++

好的,所以我是C ++的新手。我确实有一个java背景,但是用c ++我知道我现在必须自己做垃圾收集。

以下是我的情景:

int main(){
float * pt;
while(true){
 // some code
}
delete pt;
return 0;

假设您处于无休止的循环中,然后您决定通过单击窗口上的关闭按钮来结束程序。关闭程序有什么作用?它会终止吗? while循环,然后执行delete命令?或者它只是在没有完成删除命令的情况下终止程序。

3 个答案:

答案 0 :(得分:5)

像这样的简单C ++程序没有“点击关闭按钮”的概念。在开始使用GUI工具包之前,您甚至不会处理这个问题。终止此程序的不同方式完全取决于您如何运行它。您很可能是在某种终端或命令行窗口中运行它。如果该终端提供关闭按钮,则单击关闭按钮实际上是在终端应用程序中触发某些事件。这完全取决于该应用程序如何处理仍在运行的程序。通常,终端将强制终止任何子进程。然而,这是非常特定于平台的。 (对于Linux,请参阅Signals received by bash when terminal is closed

如果您担心如果您的程序被强制终止,您的资源可能不是delete,请不要这样做。任何现代操作系统都会在该过程结束时清理进程分配的资源。

答案 1 :(得分:1)

这取决于窗口是控制台窗口还是普通UI窗口,以及操作系统。如果您关闭UI窗口,该过程实际上不会终止,您将有机会做其他事情(如清理)。对于控制台窗口,该过程将被强制终止,但这更依赖于操作系统。

无论哪种方式,最后是否执行 delete 命令并不重要,因为该进程无论如何都会终止,并且进程的堆将被完全回收,无论其中仍然存在什么

答案 2 :(得分:0)

像sftrabbit之前说的那样,你不必担心你的删除, 终止过程时。但如果你必须做一些更复杂的事情,比如 向服务器发送签名消息,或提交数据库内容,有atexit()。

void mycleanup() {
    // do something here.
    // downside is ofc, that you can only use global stuff ;(
}


int main(){

atexit(mycleanup);

while(true){
 // some code
}

return 0;