C++浅谈new和delete

来源:互联网 发布:p5.js使用手册 编辑:程序博客网 时间:2024/06/15 03:56

new:

可以用C++提供的new运算符来分配内存。程序员要告诉new,需要为哪种数据类型分配内存,new将找到一个长度正确的内存块,并返回该内存块的地址。我们要做的是把该返回地址赋给合适的指针变量。如:
int *p=new int;

new int代表需要能够存储int的合适的内存块。根据数据类型不同,new确定需要多少字节的内存块。
也可以使用new来创建动态数组。并且可以根据运行时,用户提供的输入信息,来决定数组的大小。如果不用new,即通过普通声明来定义数组,则程序在编译时便将为它分配内存空间,无论在之后的运行过程中有没有用到,它都占用了一定的内存。在编译时给数组分配内存叫静态联编。而使用new,可以在运行时再确定数组的长度,这叫动态联编,因此叫做动态数组。
int *p=new [10];

用new分配数组内存空间,可以把指针变量p当成数组名字,所有数组表示法访问元素都适用。即p[0]代表数组第一个元素,p[1]代表数组第二个元素。p[i]与*(p+i)是等价的。

delete:

delete p;

这将释放p指向的内存,其中p是之前定义的指针变量,且为该指针变量new了一个某种数据类型的内存空间。delete只是释放p指向的内存,并没有删除p。可以将p重新指向一个新的被分配的内存空间。new和delete必须配对使用。而且只能delete被new分配的空间。即以下用法是不安全的:
    int a=1;    int *p=&a;    delete p;

释放单个变量内存和数组内存语法是不一样的。

    int *p=new int;    int *q=new int[10];    delete p;    delete []q;
方括号表示应释放整个数组,而不只是指针指向的那个元素。

使用new和delete时的一些规则:

1.不要使用delete释放不是由new分配的内存,这会引发意想不到的错误。
2.不要用delete释放用一块内存两次。
3.对空指针使用delete是安全的。
4.若要释放数组内存空间,则要加[]。

原创粉丝点击