對象/對象指針 以及背後的堆棧

對象:構造一個新的對象時,在棧上爲其分配內存,自動調用析構函數,不須要主動調用delete函數。c++

對象指針:new一個對象指針時,首先在堆上建立一個對象,再將對象資源的首地址賦值給對象指針。其內存須要調用delete顯式釋放,調用delete函數時,會將其在堆上的資源所有釋放,但對象指針仍然指向那塊內存,因此須要將對象指針賦值爲空。函數

 

 

總結:堆上的資源須要主動delete,因此若在構造函數中使用了new來初始化了類的某個對象指針成員,析構函數中須要記得調用delete函數釋放其資源。指針

程序裏面的static變量 常量 malloc分配的內存  對象指針所指向的內存,都在堆上。堆內存在函數退出時,不會被釋放,其地址是能夠做爲函數的返回值的。對象

 

 

 

delete和delete[]的區別:內存

類對象(c++中string是一個類):資源

A *a = new A[10]string

//delete a;//釋放a指向的所有內存,調用a[0]對象的析構函數。變量

delete[]  a;//釋放a指向的所有內存,調用a[0]~a[9]的所有析構函數。構造函數

內置的數據類型:數據類型

如int  double等,他們不是類,沒有析構函數,因此delete和delete[]效果是同樣的

相關文章
相關標籤/搜索