Chinaunix首页 | 论坛 | 博客
  • 博客访问: 225527
  • 博文数量: 80
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 781
  • 用 户 组: 普通用户
  • 注册时间: 2014-11-08 10:41
个人简介

爱莉清

文章分类

全部博文(80)

文章存档

2018年(1)

2017年(18)

2016年(49)

2015年(7)

2014年(5)

我的朋友

分类: C/C++

2016-05-06 16:40:52

在C语言中,动态分配和释放内存的函数是malloc、calloc和free,而在C++语言中,new、new[]、delete和delete[]操作符通常会被用来动态地分配内存和释放内存。


需要注意的是new、new[]、delete和delete[]是操作符,而非函数;new和delete也是C++的关键字。


操作符new用于动态分配单个空间,而new[]则是用于动态分配一个数组,操作符delete用于释放由new分配的空间,delete[]则用于释放new[]分配的一个数组。


“new 数据类型”即为new关键字的基本语法,可以动态的分配一个数据类型大小的空间。例如:

点击(此处)折叠或打开

  1. int *p = new int;


为p指针分配了一个int型的空间。new操作符根据请求分配的数据类型来推断所需的空间大小。


new[] 则是为了分配一个数组的空间。具体语法如:

点击(此处)折叠或打开

  1. int *A = new int[10];


该语句为A指针分配了一个数组的空间,该数组有10个int数组成员,如果分配成功,则p指针指向首地址,并且数组10个成员的地址是连续的,其地址分别为A、A+1、A+2、……、A+9。


delete操作符则专门用于释放由new分配的动态存储空间,在前面我们为p分配了一个int型的空间,我们可以按照如下的方式释放它:

点击(此处)折叠或打开

  1. delete p;


delete[] 则用于释放掉由new[]分配的数组空间,在前面我们为A指针分配了十个int单元,构成了一个数组,可以按照如下方式释放掉该空间:

点击(此处)折叠或打开

  1. delete[] p;


为了避免内存泄露,通常new和delete、new[]和delete[]操作符应该成对出现,并且不要将这些操作符与C语言中动态分配内存和释放内存的几个函数一起混用。建议在编写C++程序时尽量使用new、new[]、delete和delete[]操作符进行动态内存分配和释放,而不要使用C语言中内存分配和释放的函数,这是因为new、new[]、delete和delete[]操作符可以使用C++的一些特性,如类的构造函数和析构函数,能够更好地管理C++程序的内存。
阅读(1053) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~