首页 理论教育C++1.5.5new与delete用法

C++1.5.5new与delete用法

【摘要】:在C++程序中建立和删除堆对象使用两个运算符:new和delete。下面介绍通过new运算符实现这一功能,它与delete运算符一起使用,以达到直接进行动态内存分配和释放的目的。◇用new也可指定分配的内存大小,例如:◇new可以为数组分配内存,但当释放时,必须告诉delete数组有多少个元素。

在C++中,动态内存分配技术可以保证程序在运行过程中按照实际需要申请适当的内存,使用结束后还可以释放,这种在程序运行过程中申请和释放的存储单元也称为堆对象,申请和释放的过程一般称为建立和删除。

在C++程序中建立和删除堆对象使用两个运算符:new和delete。

运算符new的功能是动态分配内存,语法形式为:

new 数据类型{初始化参数列表};

运算符delete用来删除由new建立的对象,释放指针所指向的内存空间,格式为:

delete指针名;

从前面的介绍可以看出,尽管指针与数组具有相似性,但两者之间是有区别的:数组在定义时就根据指定的大小分配好了内存空间,而指针只是一个变量。那么如何给指针分配一片内存空间呢?下面介绍通过new运算符实现这一功能,它与delete运算符一起使用,以达到直接进行动态内存分配和释放的目的。

运算符new返回指定类型的一个指针,如果分配失败(如没有足够的内存空间),则返回0。例如:

double*p;

p=new double;

系统自动根据double类型的空间大小开辟一个内存单元,并将地址放在指针p中。运算符delete操作是释放new请求到的内存。例如:(www.chuimin.cn)

delete p;

需要注意的是:

◇运算符delete必须用于先前new分配的有效指针。如果使用了未定义的其他任何类型的指针,就会带来严重问题,如系统崩溃等。

◇用new也可指定分配的内存大小,例如:

◇new可以为数组分配内存,但当释放时,必须告诉delete数组有多少个元素。例如:

【例1.25】分析以下程序的错误并改正。

解:上述程序中,当遇到char*p语句时,给变量p分配一个地址单元(在32位机上为4个字节),并没有分配p所指向的数据空间,在执行strcpy(p,"China!")语句时,并不能确定把字符串"China!"放在内存中的什么地方,因此程序出错误。改正的方法是使用new先分配由p指向的内存空间,再将字符串放到这个内存空间中,并由p指向第一个字符位置。修改正确后的程序如下:

程序的执行结果如下:

China!