在软件开发过程中,常常需要动态地分配和撤销内存空间,例如对动态链表中结点的插入与删除。
在C语言中是利用库函数malloc和free来分配和撤销内存空间的。
C++提供了较简便而功能较强的运算符new和delete来取代malloc和free函数。
基本语法
注意: new和delete是运算符,不是函数,因此执行效率高。
虽然为了与C语言兼容,C++仍保留malloc和free函数,但建议用户不用malloc和free函数,而用new和delete运算符。
new运算符动态分配堆内存使用形式:
指针变量=new 类型(初始值);//初始化值可缺省
指针变量=new 类型 [表达式];// 创建数组时候,
作用:从堆分配一块“类型”大小的存储空间,返回首地址。
分配失败时候返回NULL;
delete运算符释放已分配的内存使用形式:
delete 指针变量;
delete[] 指针数组变量;
使用例子:
1 | int * pint=new int; |
1 | //基本对象的开辟与释放 |
类对象的动态建立和释放
使用类名定义的对象都是静态的,在程序运行过程中,对象所占的空间是不能随时释放的。但有时人们希望在需要用到对象时才建立对象,在不需要用该对象时就撤销它,释放它所占的内存空间以供别的数据使用。这样可提高内存空间的利用率。
C++中,可以用new运算符动态建立对象,用delete运算符撤销对象
1 | Box *pt; //定义一个指向Box类对象的指针变量pt |
在执行delete运算符时,在释放内存空间之前,自动调用析构函数,完成有关善后清理工作。
1 |
|