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