C++ new和delete操作符

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

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

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

new 数据类型即为 new 关键字的基本语法,可以动态的分配一个数据类型大小的空间。例如:
int *p = new int;
为 p 指针分配了一个 int 型的空间。new 操作符根据请求分配的数据类型来推断所需的空间大小。

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

delete 操作符则专门用于释放由 new 分配的动态存储空间,在前面我们为 p 分配了一个 int 型的空间,我们可以按照如下的方式释放它:
delete p;
delete[] 则用于释放掉由 new[] 分配的数组空间,在前面我们为 A 指针分配了十个 int 单元,构成了一个数组,可以按照如下方式释放掉该空间:
delete[] p;
为了避免内存泄露,通常 new 和 delete、new[] 和 delete[] 操作符应该成对出现,并且不要将这些操作符与 C语言中动态分配内存和释放内存的几个函数一起混用。

编写 C++ 程序时,应尽量使用 new、new[]、delete 和 delete[] 操作符进行动态内存分配和释放,而不要使用 C语言中内存分配和释放的函数,因为 new、new[]、delete 和 delete[] 操作符可以使用 C++ 的一些特性,如类的构造函数和析构函数,能够更好地管理 C++ 程序的内存。