C 程式退出時呼叫的相關函式

2021-10-04 16:18:00 字數 905 閱讀 8811

總結乙個程式可能在main函式裡中通過return 0;退出,也可能在任何函式裡呼叫std::exit(exit_success)退出,又或者因為一些錯誤崩潰退出。本文介紹在開始退出時到程式完全退出呼叫了那些函式以及資源釋放情況。

下文提到的資源包括:執行緒本地物件、靜態變數、c 的檔案描述符、std::tmpfile 開啟的檔案。

終止程式,不清理資源。

終止程式,會呼叫 sigabrt 訊號的處理函式,這個處理函式不會返回。

std::terminate 呼叫當前安裝的 std::terminate_handler。預設的 std::terminate_handler 呼叫 std::abort 。

終止程式,清理部分資源。以註冊順序的逆序呼叫傳遞給 std::at_quick_exit 的函式。若呼叫這些函式丟擲異常,則呼叫 std::terminate 。呼叫所有註冊的函式後,呼叫 std::_exit(exit_code) 。

不呼叫傳遞給 std::atexit 的函式。

終止程式,清理所有資源(不包括棧上的物件)。

清理順序:

所有的執行緒本地在靜態變數前析構(如果 thread_local 有 static 修飾,依然在這一步析構)。

靜態變數和通過 std::atexit 註冊的函式按構造和註冊 的順序逆序析構(因此兩者可以穿插進行)。

關閉所有的 c 檔案流。

移除 std::tempfile。

不呼叫傳遞給 std::at_quick_exit 的函式。

probe函式何時呼叫的

linux中 probe函式何時呼叫的 所以的驅動教程上都說 只有裝置和驅動的名字匹配,bus就會呼叫驅動的probe函式,但是有時我們要看看probe函式裡面到底做了什麼,還有傳遞給probe函式的引數我們就不知道在哪定義 反正不是我們在驅動裡定義的 如果不知道傳遞進的引數,去看probe函式總是...

C 中何時呼叫複製建構函式

在c 中,只有單個形參,而且該型別是對本類型別的引用 常用const修飾 這樣的建構函式稱為複製建構函式。複製建構函式既可以自己定義又可以像預設建構函式一樣被編譯器隱式呼叫。但大多數時候,特別是類中有指標成員的時候要實現深複製,避免淺複製時,就需要自己定義複製建構函式。那麼我們定義的複製建構函式什麼...

何時呼叫C 複製建構函式和拷貝建構函式

1.何時呼叫複製建構函式 複製建構函式用於將乙個物件複製到新建立的物件中。也就是說,它用於初始化過程中,而不是常規的賦值過程中。類的複製建構函式原型通常如下 class name const class name 它接受乙個指向類物件的常量引用作為引數。例如,string類的複製建構函式的原型如下 ...