📅  最后修改于: 2020-10-16 06:47:44             🧑  作者: Mango
内存管理是管理计算机内存,为程序分配内存空间以提高整体系统性能的过程。
众所周知,数组存储同类数据,因此大多数时候,内存是在声明时分配给数组的。有时,直到运行时才确定确切的内存时,才会出现这种情况。为了避免这种情况,我们声明了一个最大大小的数组,但是会占用一些内存。为了避免浪费内存,我们使用new运算符在运行时动态分配内存。
在C语言中,我们使用malloc()或calloc()函数在运行时动态分配内存,而free()函数用于取消动态分配的内存。 C++也支持这些功能,但是C++还定义了诸如new和Delete这样的一元运算运算符来执行相同的任务,即分配和释放内存。
使用new运算符创建对象,而使用delete运算符删除对象。当使用new运算符创建对象时,该对象将一直存在,直到我们显式使用delete运算符删除该对象为止。因此,可以说对象的生存期与程序的块结构无关。
句法
pointer_variable = new data-type
上面的语法用于使用new运算符创建对象。在以上语法中,“ pointer_variable”是指针变量的名称,“ new”是运算符,“ data-type”定义数据的类型。
范例1:
int *p;
p = new int;
在上面的示例中,“ p”是int类型的指针。
范例2:
float *q;
q = new float;
在上面的示例中,“ q”是float类型的指针。
在上述情况下,指针的声明及其分配是分别完成的。我们还可以将这两个语句组合如下:
int *p = new int;
float *q = new float;
为新创建的对象分配值的两种方法:
*p = 45;
*q = 9.8;
我们将45分配给新创建的int对象,将9.8分配给新创建的float对象。
pointer_variable = new data-type(value);
让我们看一些例子。
int *p = new int(45);
float *p = new float(9.8);
我们知道,new运算符用于为任何数据类型甚至用户定义的数据类型(例如数组,结构,联合等)创建内存空间,因此创建一维数组的语法如下:
pointer-variable = new data-type[size];
int *a1 = new int[8];
在上面的语句中,我们创建了一个int类型的数组,其大小等于8,其中p [0]表示第一个元素,p [1]表示第一个元素,依此类推。
如果不再需要内存,则需要重新分配内存,以便可以将内存用于其他用途。这可以通过使用delete运算符,如下所示:
delete pointer_variable;
在上面的语句中,“ delete”是用于删除现有对象的运算符,“ pointer_variable”是指针变量的名称。
在前一种情况下,我们使用new运算符创建了两个指针’p’和’q’,并且可以使用以下语句删除它们:
delete p;
delete q;
也可以使用以下语法从内存空间中删除动态分配的数组:
delete [size] pointer_variable;
在上面的语句中,我们需要指定大小,该大小定义了需要释放的元素数。这种语法的缺点是我们需要记住数组的大小。但是,在最新版本的C++中,我们不需要提及大小,如下所示:
delete [ ] pointer_variable;
让我们通过一个简单的例子来理解:
#include
using namespace std
int main()
{
int size; // variable declaration
int *arr = new int[size]; // creating an array
cout<<"Enter the size of the array : ";
std::cin >> size; //
cout<<"\nEnter the element : ";
for(int i=0;i>arr[i];
}
cout<<"\nThe elements that you have entered are :";
for(int i=0;i
在上面的代码中,我们使用new运算符创建了一个数组。上面的程序将在运行时接受用户输入的数组大小。程序完成所有操作后,将使用语句delete arr删除对象。
输出量
以下是新运算符对于malloc()函数的优点: