使用new和delete

一、基础知识

变量是编译时分配内存的有名称的内存。
指针只是为可以通过名称直接访问的内存提供了一个别名。指针的真正用武之地在于在运行阶段分配未命名的内存以存储值。在这种情况下,只能通过指针来访问内存。

首先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时要遵循的规则

  1. 如果在new表达式中使用了[],必须在相应的delete表达式中使用[]。如果在new表达式中不使用[],一定不要在相应的delete表达式中使用[]。确保“同时使用、相同形式”。
  2. 不要使用delete释放不是new分配的内存。
  3. 不要使用delete释放同一个内存两次。
  4. 使用new[]为数组分配的内存一定要使用delete[]释放,不能使用delete;new为单个对象分配的内存一定使用delete来释放。
  5. 对空指针delete是安全的。

猜你喜欢

转载自blog.csdn.net/zhenaoxi1077/article/details/80329942