new和delete可以有效、直接的進(jìn)行動(dòng)態(tài)內(nèi)存的分配和釋放。
運(yùn)算符new返回指定類型的一個(gè)指針,如果分配失敗(如沒有足夠的內(nèi)存空間)時(shí),則返回0.
如:
1 double *p; 2 p = new double; 3 *p = 3.1; //將值存放在開辟的單元中
系統(tǒng)自動(dòng)根據(jù)double類型的空間大小開辟內(nèi)存單元,并將地址放在指針p中。
當(dāng)然,也可以在開辟內(nèi)存單元時(shí)對(duì)單元里的值進(jìn)行初始化。
則,上述代碼等價(jià)于:
1 double *p; 2 p = new double(3.1);
運(yùn)算符delete是釋放new請(qǐng)求的內(nèi)存單元。
delete p將指針變量p指向的內(nèi)存單元釋放,指針變量p仍然有效,它可以重新指向另一個(gè)內(nèi)存單元。
new也可以為數(shù)組分配內(nèi)存單元,當(dāng)釋放時(shí),也可以告訴delete數(shù)組有多少個(gè)。
如:
1 int *p; 2 p = new int[10]; 3 delete [10]p; //告訴delete數(shù)組有多少個(gè)元素,或delete []p;
例子:
1 #include <iostream> 2 #include <cstring> 3 4 using namespace std; 5 6 int main() 7 { 8 char *p = new char[6]; 9 10 strcpy(p,"Hello"); 11 cout << p << endl; 12 delete[] p; 13 cout << p << endl; 14 15 return 0; 16 }
運(yùn)行結(jié)果:
1Hello
運(yùn)行環(huán)境:
ubuntu 12.10
gcc版本 4.7.2