如果我有一個功能叫我時,有我的應用程序的錯誤,我呼籲ExitProcess
在該函數退出。我是否需要找到一種方法讓它可以調用諸如WSACleanup()
和ReleaseMutex
和RemoveFontMemResourceEx
之類的東西,並免費獲得其他手動分配的變量?C++錯誤清理
我認爲系統自動執行此操作時,我的應用程序退出,但有一個原因,我會想反正調用這些函數清理? 如果我不這樣做,我需要甚至在我的應用程序退出之前調用它們嗎?
如果我有一個功能叫我時,有我的應用程序的錯誤,我呼籲ExitProcess
在該函數退出。我是否需要找到一種方法讓它可以調用諸如WSACleanup()
和ReleaseMutex
和RemoveFontMemResourceEx
之類的東西,並免費獲得其他手動分配的變量?C++錯誤清理
我認爲系統自動執行此操作時,我的應用程序退出,但有一個原因,我會想反正調用這些函數清理? 如果我不這樣做,我需要甚至在我的應用程序退出之前調用它們嗎?
大多數(所有?)現代操作系統釋放資源最多的時候一個進程退出,所以大多數的時候是安全的只是退出。但有理由明確發佈它們。
首先,如果你使用的資源泄漏檢測工具(如Valgrind的內存泄漏爲例),它要給你誤報。
其次,如果你的代碼獲取在未來的重構,你可能會忘記一些資源而造成滲漏。
所以我認爲一旦完成它們就釋放資源總是一個好主意。
釋放資源對於適當的內存泄漏測試是必要的,但您並不需要它來處理出錯錯誤。 –
關閉網絡連接是明智的做法。它告訴對方連接已關閉,因此可以重用端口號 –
yi_H:同意,但我的其他觀點仍然存在。 Ed Heal:是的,Unix信號量是系統無法正確處理資源的另一個例子。 – cyco130
的atexit
功能可能是有用的 - http://www.cplusplus.com/reference/clibrary/cstdlib/atexit/
+1表示用'atexit'註冊的函數正是我所建議的。 –
......只有當您使用'ExitProcess'時,纔會工作,因爲終端將繞過CRT接線。但是,如果OP使用'ExitProcess'和更合適的'exit',這是有道理的。 – eran
你的問題沒有正確標記。我沒有看到與C的直接關係,另一方面,您似乎嚴重依賴於特定操作系統的特性。請糾正這一點。 –