new和delete可以有效、直接的進行動態(tài)內(nèi)存的分配和釋放。
運算符new返回指定類型的一個指針,如果分配失。ㄈ鐩]有足夠的內(nèi)存空間)時,則返回0.
如:
1 double *p; 2 p = new double; 3 *p = 3.1; //將值存放在開辟的單元中
系統(tǒng)自動根據(jù)double類型的空間大小開辟內(nèi)存單元,并將地址放在指針p中。
當然,也可以在開辟內(nèi)存單元時對單元里的值進行初始化。
則,上述代碼等價于:
1 double *p; 2 p = new double(3.1);
運算符delete是釋放new請求的內(nèi)存單元。
delete p將指針變量p指向的內(nèi)存單元釋放,指針變量p仍然有效,它可以重新指向另一個內(nèi)存單元。
new也可以為數(shù)組分配內(nèi)存單元,當釋放時,也可以告訴delete數(shù)組有多少個。
如:
1 int *p; 2 p = new int[10]; 3 delete [10]p; //告訴delete數(shù)組有多少個元素,或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 }
運行結果:
1Hello
運行環(huán)境:
ubuntu 12.10
gcc版本 4.7.2