乙個小栗子理解exit(1)與呼叫析構函式的關係

2021-07-11 14:23:48 字數 666 閱讀 6258

編譯環境:vc6.0

#include

#include

class sample

~sample()

};void main()

可以發現執行上述函式之後並無輸出;原因是main函式呼叫了exit() 函式,而它的作用是會刪除所有的靜態物件、重新整理緩衝、關閉所有的 i/o 通道然後結束程式。然而物件a1,a2為區域性變數,exit(1)不會呼叫物件的析構函式,因為不存在棧空間**的問題。

如果把a1,a2定義為靜態區域性變數:static sample a1(10),a2(20);

則 可看到程式呼叫兩次析構函式後退出,並未輸出「取消」。原因是程序已被exit結束。

如果把a1,a2定義為全域性變數,程式似乎也並沒有輸出。呼叫析構函式失敗了?其實是因為cout作為乙個iostream類的物件,在退出main函式後比類物件a1,a2先執行析構函式,故無法輸出.換成printf()函式就可以正常輸出。

小結:一、

如果物件是全域性變數,即使用 exit() 退出程式,也會呼叫物件的析構函式。

如果是區域性變數,不會呼叫物件的析構函式。因為不存在棧空間**的問題。

如果是動態建立的物件,除非你自己刪除,否則更不會呼叫物件的析構函式。二、

不同編譯器對析構函式的呼叫順序不同。相同的程式在不同編譯器可能得出不同的結果。

Python教程 乙個小栗子和乙個小練習

python教程正在更新中 檢視python教程目錄 學了這麼多,我們來做幾個小練習。1.從命令列讀入出生年份是2001年,並且計算年齡例如那麼今年的年齡就是19歲 birth year input birth year age 2020 birth year print age 這是我們最樸素的思...

關於使用CPU快取的乙個小栗子

一 背景知識 cpu快取 cache memory 是位於cpu與記憶體之間的臨時儲存器,它的容量比記憶體小的多但是交換速度卻比記憶體要快得多。快取記憶體的出現主要是為了解決cpu運算速度與記憶體讀寫速度不匹配的矛盾,因為cpu運算速度要比記憶體讀寫速度快很多,這樣會使cpu花費很長時間等待資料到來...

乙個利用sed和awk處理文字的小栗子

這兩天做 linux作業系統 課程的作業,碰到了乙個題目,感覺很有意思,很考驗對awk掌握的熟練度,故特意拿來分享。首先說題目是這樣的,有這樣一段文字 record 這是多餘的注釋行one record type students 這是多餘的注釋行two f sno 11111110000 f na...