c++动态内存分配和撤销方式实例说明



c++动态内存分配和撤销方式剖析。C语言中是利用库函数malloc以及free来分配与撤销内存空间的。C++提供了运算符new以及delete来取代malloc和free函数。new和delete是运算符,不是函数,所以执行效率高。和C语言兼容,但是C++仍保留malloc和free函数,提议使用new与delete运算符,不要用malloc及free函数。

c++ New运算符一般格式:new 类型 [初值]

c++用new分配数组空间时不能指定初值。由于内存不足等原因无法正常分配空间,那么new会返回一个空指针NULL,也可根据该指针的值判断分配空间是否成功。

Delete运算符一般格式:

Delete[ ] 指针变量

实例说明:开辟空间存放一个结构体变量:

/*

*test3.cpp

*

* Created on: 2012-4-10

* Author: David

*/

 

#include<iostream>

#include<string>

usingnamespace std;

struct Student

{


stringname;

int num;

char sex;

};

int main()

{

Student*p; //定义指定结构体类型Student的数据的指针变量

p=new Student; //用new运算符开辟一个存放Student型数据的空间

p->name=”David”;//向结构体变量的成员赋值

p->num=12345;

p->sex=”m”;

cout<<p->name<<endl<<p->num<<endl<<p->sex<<endl;//输出各个参数

delete p; //撤销该空间

return 0;

}

以上代码,并没有定义结构体变量,而是定义了基类型为Student的指针变量p,用new开辟一段空间来存放Student类型的变量p。空间的大小由系统根据Student结构体大小自动算出,不需要指定。执行new得到一个指向Student类型数据的指针值即起始地址,把这个起始地址赋给p。可以通过p来访问该空间,并对该空间内的成员赋值操作。用delete撤销该空间。在动态分配/撤销空间的时候,通常将这两个运算符和结构体结合使用。要访问用new开辟的结构体空间,无法直接通过变量名进行,只能通过指针p进行访问。

假如要建立一个动态链表,须从第一个结点开始,逐个开辟结点并输入各结点数据,通过指针建立起前后相链的关系。