在我的示例程序中,看起來它確實在兩種情況下都調用了析構函數。在什么時候它稱為全局和類靜態變量的析構函數,因為它們應在程序堆棧的數據部分中分配?
3 回答

蕪湖不蕪
TA貢獻1796條經驗 獲得超7個贊
根據C ++ 03標準的第3.6.3節:
從main返回和調用exit(18.3)的結果,將調用靜態存儲持續時間初始化對象的析構函數(12.4)(在塊作用域或命名空間作用域聲明)。這些對象按照其構造函數完成或動態初始化完成的相反順序銷毀。如果對象是靜態初始化的,則該對象的破壞順序與該對象被動態初始化的順序相同。對于數組或類類型的對象,該對象的所有子對象都必須先銷毀,然后再銷毀在構造子對象期間初始化了靜態存儲時間的任何本地對象。
此外,第9.4.2 7節規定:
靜態數據成員的初始化和銷毀完全類似于非本地對象(3.6.2、3.6.3)。
但是,如果析構函數沒有可觀察到的行為,則可能不會調用它。特里·馬哈菲(Terry Mahaffey)在回答“是否保證C ++析構函數直到塊末尾才被調用?”中對此進行了詳細說明。。
- 3 回答
- 0 關注
- 756 瀏覽
添加回答
舉報
0/150
提交
取消