原文見:
個人心得:先看以下**
#include
#include
using namespace std;
class shape
當有那句delete b時,執行結果如圖,
而當沒有delete b時,執行結果如圖
這說明,直接宣告的物件,比如shape a,即在棧上面的物件,所在作用域結束後,會自動執行析構函式,而new出來的在堆上的物件,不呼叫delete,即使它所在的作用域已經結束,也不會呼叫析構函式,根據另外一篇文章內所述,可能程式結束後,os(作業系統)會**其堆內占用的記憶體,這樣就不知道會幹什麼,會不會呼叫析構了。
delete詳解:首先呼叫析構函式,完成類成員的釋放,比如類成員有vector也指向了堆上的記憶體,就需要在析構函式中同樣使用delete釋放這塊記憶體,或者說它自身處於乙個容器當中,就需要在這個容器中erase它
然後再free掉整個物件的記憶體;
delete b過後,b仍然指向改記憶體,即位址不變,但指標可能為懸垂指標,訪問它可能帶來意想不到的結果,也可能正確訪問,不確定,所以建議delete後,把指標設定成null,後面也可根據指標是否為null判斷是否可用
delete和析構函式間的關係及細節
個人心得 先看以下 include include using namespace std class shape shape int main 當有那句delete b時,執行結果如圖,也就是說delete b之後執行了shape的析構函式,而按了任意鍵之後,會立馬閃出乙個析構a來,這說明程式執行...
c 中delete和析構函式之間的區別
delete 1.呼叫析構函式,釋放物件中的成員資源 2.歸還物件空間 free 其中在呼叫析構函式的時候,有可能還會對其他物件進行delete,然後呼叫這個物件的析構函式。看這個例子 delete用於釋放new在堆中動態生成的物件空間。釋放時會自動呼叫類的析構函式,在析構函式中用於釋放類內部動態分...
建構函式 析構函式和虛函式的關係
首先明確兩點 建構函式不可能定義為虛函式 虛函式的目的是通過父類引用或者指標呼叫子類的成員函式。而建構函式的目的是建立物件。建立子類物件時,將呼叫子類的建構函式,而不是父類的建構函式。子類的建構函式將使用父類的乙個建構函式。這種順序不同於繼承機制。因此,子類不繼承父類的建構函式,所以將類的建構函式宣...