在C++中,對於變量和對象都是編譯器在編譯時分配好的,對於數組初始化時,無法確定多少內存,很容意造成大開小用的情況。
new 動態分配
一般格式:1. 指針變量名 =new 類型標識符;
2.指針變量名 =new 類型標識符(初始值);
3.指針變量名 =new 類型標識符 [內存單元個數]; 開辟數組的定義方法
new運算符返回的是一個指向所分配類型變量的指針。
delete 釋放內存
一般格式:1.delete p;
2.delete []p;
刪除變量p的地址空間,釋放int內存。 --堆區(優先隊列) delete p實際意思是刪除p所指向的目標地址,釋放它所占的內存,而非刪除p指針。
對於delete 有兩大問題: 1.內存泄露 2.重復釋放
int* p=new int;
delete p;
p=NULL; //上完廁所洗手的好習慣
析構函數
對於線性表的析構函數
1. int* p;
while(fisrt!=NULL){
p=first;
first=first->next;
delete p;
}
錯誤解析:
int* p=first;
while (p!=NULL){
delete p;
p=p->next;
}
已經釋放了p所指向的first地址,p->next 到底指向什么了?錯誤!!!
int a=5;
int* p=a;
cout<<*p<<endl; p 所指向的地址內容
cout<<&p<<endl; p本身的地址
cout<<p<<endl; p所指向的地址 == &a