📜  C++动态内存(1)

📅  最后修改于: 2023-12-03 15:14:04.126000             🧑  作者: Mango

C++动态内存介绍

在C++中,动态内存可以通过newdelete操作符来分配和释放。动态内存分配是通过堆来完成的,而静态内存分配是在程序编译时完成的。动态内存分配允许分配任意大小的内存空间,并且在程序运行期间可以动态地进行分配和释放。

动态内存分配

动态内存可以通过new操作符进行分配,语法格式如下:

new type-name;

其中,type-name是数据类型名称,可以是内置数据类型、自定义数据类型或指针类型。

例如,要在动态内存中分配一个整型变量,可以使用下面的代码:

int* p = new int;

此时,p指向分配的整型变量所在的内存区域。我们可以使用类似于指针操作的方式来使用这个变量:

*p = 100;
std::cout << *p << std::endl;

输出结果为:

100

注意:动态内存分配后,需要手动释放内存,否则容易造成内存泄露。

动态内存释放

动态内存可以通过delete操作符进行释放,语法格式如下:

delete pointer;

其中,pointer是要释放的指针变量。例如,要释放上述代码中分配的整型变量,可以使用下面的代码:

delete p;

此时,p指向的内存区域就被释放掉了。

注意:在使用delete操作符释放内存时,必须保证指针指向的地址是通过new操作符分配的,否则可能导致程序异常。此外,释放内存后,应将指针变量置为NULL,以避免野指针的出现。

动态内存分配与初始化

动态内存分配时,可以同时进行初始化。我们可以使用带参数的new操作符来实现,语法格式如下:

new type-name(initializer);

其中,initializer是初始化值,可以是表达式、字面值或数组等。

例如,要在动态内存中分配并初始化一个长度为5的整型数组,可以使用下面的代码:

int* arr = new int[5]{1,2,3,4,5};

此时,arr指向一个长度为5的整型数组。

动态内存分配与构造函数

在C++中,自定义数据类型可以拥有构造函数。动态分配内存时,可以通过构造函数来初始化对象。例如,要在动态内存中分配一个自定义对象,可以使用下面的代码:

MyClass* obj = new MyClass(args...);

其中,args是构造函数的参数列表。

动态内存分配与析构函数

在C++中,自定义数据类型可以拥有析构函数。动态分配内存后,必须手动通过delete操作符来进行内存释放,并调用析构函数来销毁对象。例如,要释放上述代码中分配的自定义对象,可以使用下面的代码:

delete obj;

此时,obj指向的内存区域就被释放掉了,并调用了MyClass的析构函数。

总结

C++中的动态内存分配允许程序在运行期间动态地分配和释放内存空间,可以满足程序动态的内存需求。在使用动态内存时,需要注意内存泄露、野指针等问题,避免出现内存相关的运行错误。