對象:構造一個新的對象時,在棧上爲其分配內存,自動調用析構函數,不須要主動調用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[]效果是同樣的