[英]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.