`

动态内存分配和撤销方式剖析

 
阅读更多

动态内存分配和撤销方式剖析

在C语言中是利用库函数malloc和free来分配和撤销内存空间的。C++提供了运算符new和delete来取代malloc和free函数。注意:new和delete是运算符,不是函数,因此执行效率高。虽然与C语言兼容,C++仍保留malloc和free函数,建议使用new和delete运算符,不要用malloc和free函数。

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

用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进行访问。

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

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics