亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

C ++是否為全局和類靜態變量調用析構函數?

C ++是否為全局和類靜態變量調用析構函數?

C++
一只斗牛犬 2019-11-29 10:23:58
在我的示例程序中,看起來它確實在兩種情況下都調用了析構函數。在什么時候它稱為全局和類靜態變量的析構函數,因為它們應在程序堆棧的數據部分中分配?
查看完整描述

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 ++析構函數直到塊末尾才被調用?”中對此進行了詳細說明。。


查看完整回答
反對 回復 2019-11-29
  • 3 回答
  • 0 關注
  • 756 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號