终止无止境的while循环 好的,所以我是一个真正的C++新手。我有java背景,但是C++,我知道我现在必须自己做垃圾收集。p>

终止无止境的while循环 好的,所以我是一个真正的C++新手。我有java背景,但是C++,我知道我现在必须自己做垃圾收集。p>,c++,C++,以下是我的设想: int main(){ float * pt; while(true){ // some code } delete pt; return 0; 假设您处于一个无休止的while循环中,然后您决定通过单击窗口上的close按钮来结束您的程序。关闭程序的作用是什么?它是否终止了 while循环,然后执行delete命令?或者它只是在不完成删除命令的情况下终止程序。 < P>一个简单的C++程序,例如,没有“点击关闭按钮”的概念。在开始使用GUI工具包之前,您甚至不会处理这些问

以下是我的设想:

int main(){
float * pt;
while(true){
 // some code
}
delete pt;
return 0;
假设您处于一个无休止的while循环中,然后您决定通过单击窗口上的close按钮来结束您的程序。关闭程序的作用是什么?它是否终止了
while循环,然后执行delete命令?或者它只是在不完成删除命令的情况下终止程序。

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


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

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


无论哪种方式,是否在最后执行delete命令都无关紧要,因为进程无论如何都会终止,并且进程的堆将被完全回收,而不管堆中还有什么。

如前所述,您不必担心删除, 当终止进程时。但是如果你要做更复杂的事情,比如 向服务器发送签核消息,或提交数据库内容,有atexit()


如果您使用
break
,它将脱离while循环并继续执行它的操作。如果您的场景是代码的实际部分,为什么要在浮点指针中使用delete?
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;