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进行访问。
假如要建立一个动态链表,须从第一个结点开始,逐个开辟结点并输入各结点数据,通过指针建立起前后相链的关系。