一、基础知识
变量是编译时分配内存的有名称的内存。
而指针只是为可以通过名称直接访问的内存提供了一个别名。指针的真正用武之地在于在运行阶段分配未命名的内存以存储值。在这种情况下,只能通过指针来访问内存。
首先new找到一块长度正确的内存块,并返回该内存的地址;
然后程序员的责任是将该内存地址赋值给一个指针。如:
方式一:
int * pn=new int;
delete pn;
方式二:
int higgens;
int * pt=&higgens;
delete pt;
第一种情况下只能通过指针来访问;
第二种情况可以通过higgens来访问该int.
为一个数据对象(可以是结构,也可以是基本类型)获得并指定分配内存的通用格式如下:
typeName * pointer_name = new typeName ;
...
delete pointer_name ;
二、使用new创建动态数组
int *ps = new int [10]; //创建一个包含10个int 元素的数组。
delete [] ps; //对于new创建的数组,使用delete [] 来释放。
new运算符返回第一个元旦的地址,改地址被赋值给指针ps.
方括号[]告诉程序,应该释放整个数组,而不仅仅是指针指向的元素。
为数组分配内存的通用格式如下:
typeName * pointer_name = new typeName [num_elements] ;
...
delete [] pointer_name ;
三、使用new和delete时要遵循的规则
- 如果在new表达式中使用了[],必须在相应的delete表达式中使用[]。如果在new表达式中不使用[],一定不要在相应的delete表达式中使用[]。确保“同时使用、相同形式”。
- 不要使用delete释放不是new分配的内存。
- 不要使用delete释放同一个内存两次。
- 使用new[]为数组分配的内存一定要使用delete[]释放,不能使用delete;new为单个对象分配的内存一定使用delete来释放。
- 对空指针delete是安全的。