首頁  >  文章  >  後端開發  >  全域變數和靜態變數是否會呼叫 C 析構函數?

全域變數和靜態變數是否會呼叫 C 析構函數?

DDD
DDD原創
2024-11-06 13:22:02396瀏覽

Do C   Destructors Get Called for Global and Static Variables?

C 是否為全域和類別靜態變數呼叫析構函數?

與某些假設相反,C 確實為全域和類別呼叫析構函數-靜態變數。它們的銷毀發生在兩個特定的時刻:

  1. 從 Main 返回時: 當 main() 函數結束時,所有全域變數和類別靜態變數都被銷毀。這符合 C 03 標準的第 3.6.3 節,該標準要求「作為從 main 返回的結果」進行此銷毀。
  2. 呼叫Exit 時: 如果exit() 函數是在程式中使用時,它會「由於呼叫退出」而觸發全域變數和類別靜態變數的破壞,如§所述3.6.3.

值得注意的是,這些變數的銷毀順序反映了它們的建構子或動態初始化的相反順序。此外,根據第 9.4.2 7 節,靜態資料成員的初始化和銷毀與非本地物件相同。

但是,需要注意的是,可能不會呼叫沒有可觀察行為的析構函數。 Terry Mahaffey 對「是否保證在區塊結束之前不會呼叫 C 析構函數?」的回應進一步探討了這一點

以上是全域變數和靜態變數是否會呼叫 C 析構函數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn