new和delete可以有效、直接的进行动态内存的分配和释放。
运算符new返回指定类型的一个指针,如果分配失败(如没有足够的内存空间)时,则返回0.
如:
1 double *p; 2 p = new double; 3 *p = 3.1; //将值存放在开辟的单元中
系统自动根据double类型的空间大小开辟内存单元,并将地址放在指针p中。
当然,也可以在开辟内存单元时对单元里的值进行初始化。
则,上述代码等价于:
1 double *p; 2 p = new double(3.1);
运算符delete是释放new请求的内存单元。
delete p将指针变量p指向的内存单元释放,指针变量p仍然有效,它可以重新指向另一个内存单元。
new也可以为数组分配内存单元,当释放时,也可以告诉delete数组有多少个。
如:
1 int *p; 2 p = new int[10]; 3 delete [10]p; //告诉delete数组有多少个元素,或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
运行环境:
ubuntu 12.10
gcc版本 4.7.2