簡體   English   中英

exit()是否刷新並關閉`ofstream`對象?

[英]Does exit() flush and close `ofstream` objects?

exit(3)表示stdio流被刷新並關閉。 但沒有什么能說明C ++特有的ofstream對象。

標准是否保證ofstream對象也被正確刷新和關閉,或者我是否必須以某種方式將退出條件傳播到main()return那里以銷毀所有自動流?

std::exit()破壞具有靜態存儲持續時間的對象(從而沖洗這樣ofstream對象)。 它不破壞具有自動存儲持續時間的對象(例如留下ofstream對象未刷新)。

無論ofstream刷新取決於它的存儲時間。

不, exit不應該沖洗iostreams。 iostreams在close() (在可用的流類型上) flush ,在流上顯式調用flush或在銷毀時flush

在應用程序中使用exit將使對象處於它們所處的狀態(除非它們是靜態的),因此需要清理的資源將被泄露。 這不適用於內存泄漏,因為大多數操作系統在程序退出時清理為程序本身分配的內存。

這是不建議在您的應用程序中調用exit的原因之一(除非在非常特殊的情況下) - 您最好拋出異常而不是exit

編輯:通過“非常特殊的情況”我的意思是當你有強烈的要求時,例如“為了避免破壞加密密鑰,庫將在此時調用std::exit ,而不允許調用代碼執行任何其他操作”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM