好的,所以我是 C++ 的新手。我确实有 java 背景,但是使用 c++ 我知道我现在必须自己进行垃圾收集。
这是我的场景:
int main(){
float * pt;
while(true){
// some code
}
delete pt;
return 0;
假设您处于无休止的 while 循环中,然后您决定通过单击窗口上的关闭按钮来结束程序。关闭程序有什么作用?它会终止while循环,然后执行删除命令吗?或者它只是在没有完成删除命令的情况下终止程序。
好的,所以我是 C++ 的新手。我确实有 java 背景,但是使用 c++ 我知道我现在必须自己进行垃圾收集。
这是我的场景:
int main(){
float * pt;
while(true){
// some code
}
delete pt;
return 0;
假设您处于无休止的 while 循环中,然后您决定通过单击窗口上的关闭按钮来结束程序。关闭程序有什么作用?它会终止while循环,然后执行删除命令吗?或者它只是在没有完成删除命令的情况下终止程序。
像这样的简单 C++ 程序没有“单击关闭按钮”的概念。在您开始使用 GUI 工具包之前,您甚至不会处理这个问题。终止此程序的不同方式完全取决于您运行它的方式。您很可能在某种终端或命令行窗口中运行它。如果该终端提供关闭按钮,则单击关闭按钮实际上会触发终端应用程序中的某些事件。它如何处理您仍在运行的程序完全取决于该应用程序。通常,终端会强制终止任何子进程。然而,这是非常特定于平台的。(对于 Linux,请参阅终端关闭时 bash 收到的信号)
如果您担心delete
如果您的程序被强制终止,您的资源可能不会被删除,请不要这样做。任何现代操作系统都会在进程结束时清理进程分配的资源。
这取决于窗口是控制台窗口还是普通 UI 窗口,以及操作系统。如果您关闭 UI 窗口,该过程实际上不会终止,您将有机会执行其他操作(如清理)。对于控制台窗口,该进程将被强制终止,但这更依赖于操作系统。
无论哪种方式,最后是否执行删除命令都无关紧要,因为进程无论如何都会终止,并且进程的堆将被完全回收,无论其中还有什么。
like sftrabbit said before, you don't have to worry your about delete, when terminating the process. but if you have to do something more complicated, like sending a signoff message to a server, or committing database stuff, there's 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;