2013-02-09 80 views
0

好吧,所以我是一個真正的新的C++。我有一個java背景,但用C++我知道我現在必須做我自己的垃圾收集。終止一個無盡的循環

這裏是我的情況:

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

說你是在一個無限while循環,然後你決定通過點擊窗口上的關閉按鈕結束程序。什麼關閉程序呢?它是否會終止 while循環,然後執行刪除命令?或者它只是在沒有完成刪除命令的情況下終止程序。

+1

如果你使用'break',它會跳出while循環並繼續做它的事情。 – Rapptz 2013-02-09 20:48:31

+0

如果你的場景是你的代碼的實際部分,你爲什麼在浮點指針中使用delete? – 2013-02-09 20:53:25

回答

5

這樣一個簡單的C++程序沒有「單擊關閉按鈕」的概念。直到你開始使用GUI工具包玩,你甚至都不會去處理它。終止這個程序的不同方式完全取決於你如何運行它。很可能你正在某種終端或命令行窗口中運行它。如果該終端提供關閉按鈕,則單擊關閉按鈕實際上是在終端應用程序中觸發某個事件。它完全取決於該應用程序如何處理您仍在運行的程序。終端通常會強制終止任何子進程。然而,這是非常具體的平臺。 (對於Linux,請參閱Signals received by bash when terminal is closed

如果您擔心事實上您的資源可能不是delete d如果您的程序被強制終止,請勿。任何現代操作系統將在該過程結束時清理由進程分配的資源。

1

這取決於窗口是控制檯窗口還是正常的UI窗口,以及操作系統上。如果你關閉一個UI窗口,這個過程不會真的終止,你將有機會做其他事情(如清理)。對於控制檯窗口,該過程將被強制終止,但這更依賴於操作系統。

無論哪種方式,刪除命令是否在最後被執行都無關緊要,因爲進程終止,並且無論進程的堆中還存在什麼,該進程的堆將被完全回收。

0

像sftrabbit之前所說的,你不必擔心你的刪除, 終止進程時。但是如果你不得不做更復雜的事情,比如 發送一個signoff消息給服務器,或者提交數據庫的東西,那麼就有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;