new出來的空間如果沒有主動銷毀,在程序退出時仍可能有內(nèi)存的泄露。
操作系統(tǒng)描述到,在進(jìn)程退出時會銷毀它所使用的所有內(nèi)存空間,但這只是
一個模型上的構(gòu)想和描述。在實際的操作系統(tǒng)的實現(xiàn)上并不能做到這一點。
因為,要實現(xiàn)在進(jìn)程退出時銷毀它所使用的內(nèi)存空間,就要給每個被使用的
內(nèi)存空間打一個標(biāo),表示這段內(nèi)存空間被那個進(jìn)程使用。在這種情況下,如
果有多個使用小內(nèi)存量的進(jìn)程,并且被頻繁的創(chuàng)建和銷毀,那么光記住那些
進(jìn)程標(biāo)致就要占用很大的內(nèi)存空間,這是一個很不劃算的方案。所以在實際
中,操作系統(tǒng)并沒有給每個進(jìn)程使用的內(nèi)存空間打標(biāo)。這樣,有些小內(nèi)存是
沒有被回收的,如果多次開關(guān)這個程序就會發(fā)現(xiàn),有內(nèi)存被大量的占用,而
不能被釋放。
所以那些在程序中只有一個實例,并且是被new出來的對象,也應(yīng)該主動
的去手動銷毀,而不能依賴程序退出時由系統(tǒng)銷毀。
被new出來的對象其銷毀是兩個步驟。
1 析構(gòu)對象。條用對象的析構(gòu)函數(shù),將對象占用的資源釋放掉。
2 釋放內(nèi)存。將對象所占用的內(nèi)存釋放掉。
如果new出來的對象沒有被銷毀,會造成連個層面上的泄露。
1 對象泄露。他會造成背對象占用的資源也沒有銷毀或釋放。比如在對象
中占有文件的句柄,在析構(gòu)時才釋放。如果對象泄露了,這個句柄是不會被釋
放的。那個文件會一直被占用。如果文件打開時是獨占的,那么及時對象所在
的程序退出了,別的程序也別想訪問這個文件。
2 內(nèi)存泄露。所占用的內(nèi)存不能被釋放。
posted on 2007-05-31 10:50
walkspeed 閱讀(2705)
評論(5) 編輯 收藏 引用 所屬分類:
C++語言