🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
>[danger]动态空间一旦分配,就需要自行回收,否则会产生内存泄漏(内存垃圾)。 ## 一.使用new和delete运算符分配 + C++的new运算符返回一个指针。 + 当内存不足时,new表达式会抛出一个类型为 `std::bad_alloc` 的异常。 + 如果需要内存不足时返回空指针,可以加一个(nothrow) `int *p2 =new (nothrow) int;` ```c++ #include <iostream> using namespace std; int main() { //分配空间 int *uninitialized = new int; //分配空间并初始化 int *initialized = new int(666); //分配连续的空间(不能初始化) int *array = new int[5]; int i; //赋值 *uninitialized = 2333; for (i = 0; i < 5; i++) { array[i] = i; } //输出 cout<<*initialized<<endl; for (i = 0; i < 5; i++) { cout<<array[i]<<endl; } delete uninitialized;//释放空间 delete initialized;//释放空间 delete[] array;//释放数组空间 return 0; } ``` ## 二.使用函数分配 >[danger]要使用这些函数,需要引用标准库 `stdlib.h` 或 `cstdlib` ```c void * malloc (unsigned size);//创建空间 void free (void *p);//释放空间 void * realloc (void *p,unsigned size);//修改空间 void * calloc (unsigned n,unsigned size);//创建空间并初始化为0 ``` `malloc` 与 `calloc` 的区别: + 参数不一样。 + `calloc` 会将分配到的空间初始化为0,而 `malloc` 不会进行初始化。 `malloc` 与 `new` 的区别: + `malloc` 分配空间后,不会调用类的构造函数,而 `new` 则会调用构造函数。 + `malloc` 返回一个 `void *` 指针,需要手动类型转换,而 `new` 则返回对象指针。 + 当内存不足时,`new` 表达式会抛出一个类型为 `std::bad_alloc` 的异常。而 `malloc` 则会返回空指针。 `free` 与 `delete` 的区别: + `free` 不会调用类的析构函数,而 `delete` 会调用类的析构函数。