📅  最后修改于: 2023-12-03 15:13:58.501000             🧑  作者: Mango
在 C++ 中,new 和运算符 new 都用于在堆上分配内存空间并返回指向该空间的指针。然而,它们有一些关键的区别。
从语法上看,运算符 new 只是一种用于动态分配内存的操作符。它使用以下语法进行分配:
pointer_variable = new data_type;
其中,pointer_variable
是指向 data_type 数据类型的指针。运算符 new 会在堆上分配足够的内存来存储 data_type 的对象,并将其地址赋给指针变量。
例如,以下代码分配了一个 int 类型的对象并将其地址赋给指针变量 ptr
:
int* ptr = new int;
在分配内存时,运算符 new 首先计算需要的内存空间大小,然后找到合适的空间,并返回指向该空间的指针。如果失败,它会引发 std::bad_alloc 异常。
需要注意的是,使用运算符 new 分配的内存必须通过运算符 delete 或 delete[] 进行释放,以避免内存泄漏。
new 是 C++ 中的关键字,它与运算符 new 一起使用,具有更多的功能。
使用 new 关键字可以在堆上分配单个对象的内存空间,并返回指向该对象的指针。使用 new 关键字的语法如下:
pointer_variable = new data_type;
例如,以下代码分配了一个 int 类型的对象并将其地址赋给指针变量 ptr
:
int* ptr = new int;
与运算符 new 相同,需要通过 delete 或 delete[] 来释放通过 new 关键字分配的内存。
new 关键字还可用于在堆上分配动态数组。使用 new 关键字分配动态数组的语法如下:
pointer_variable = new data_type[size];
其中,size
是数组大小,pointer_variable
是指向数组的指针。
例如,以下代码分配了一个包含 5 个 int 元素的数组,并将其首地址赋给指针变量 ptr
:
int* ptr = new int[5];
同样,通过 delete 或 delete[] 来释放通过 new 关键字分配的动态数组的内存。
需要注意的是,如果使用 new 分配的动态数组,应使用 delete[] 来释放内存,而不是 delete。这是因为 delete[] 方法会调用数组元素的析构函数,而 delete 方法仅销毁单个对象。
运算符 new 和关键字 new 都可以在堆上分配内存空间,并返回指向该空间的指针。运算符 new 仅用于分配内存,而关键字 new 还可以用于分配单个对象和动态数组。使用 new 分配的内存应通过 delete 或 delete[] 释放,以避免内存泄漏。