簡體   English   中英

使用atexit功能的場景是什么?

[英]What's the scenario to use atexit function?

CRT函數atexit()可以在main函數返回后注冊一個函數來運行。 我想知道使用它的典型場景是什么? 是( atexit )真的有必要嗎?

我猜它的主要用途是當你無法控制main ,你想確保在它結束時調用某些東西。

它有時被庫使用,它們不希望在終止程序之前,用戶程序明確地調用它們的清理函數。

它也用於鳳凰單身模式(參見Andrei Alexandrescu的Modern C ++ Design)。

它可以用於您需要執行的任務,每當應用程序關閉時。 通過使用它,您不需要在代碼中找到的每個exit()之前添加所有清理代碼來膨脹您的代碼。

一些用例:

  • 清理臨時文件夾
  • 打印內存轉儲

atexit的主要用途之一是庫在程序退出時執行清理。 請注意,調用exit會調用atexit而不是在程序中止或崩潰時調用,因此您無法對斷言失敗等進行清理。 如果程序調用exec也不會調用它。

如果你想要的話,你可以直接在主程序中調用它,如果你有一個可能因某種原因調用exit的庫。

請注意,您只能注冊有限數量的atexit處理程序,其中“limited”取決於您的操作系統,因此它會返回錯誤狀態。

它為C程序提供了類似的能力,可以在C ++中調用靜態變量的析構函數。

我用它來刪除臨時文件,或者(一次或兩次)重置一些硬件寄存器。 通常沒有必要使用它來關閉文件或釋放內存,因為操作系統會為你做這件事。

在編寫庫時...想象一下在崩潰時將堆棧保存在預定義路徑上(或郵件跟蹤)的庫。


編輯 - 正如評論中提到的,這個答案是錯誤的。 不讀它。 太晚了。

可以在atexit()中處理異常.Assume多進程環境。 有一個物理可用的硬件資源。 任何一個進程都可以一次使用該h / w。 現在process1獲取了h / w資源,並且在處理process1之后沒有釋放h / w資源。 為了釋放h / w資源,可以使用此atexit(),以便process2可以有效地獲取h / w。

暫無
暫無

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

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