C++动态内存(笔记二)

一、直接内存管理

c++中,定义了两个运算符来分配和释放动态内存。运算符new分配内存,delete释放new分配的内存。

使用new动态分配和初始化对象
int *pi =new int;//在自由空间构造一个int型对象,并返回指向对象的指针。
默认情况下,动态分配的对象是默认初始化的,即上面的pi指向一个未初始化的int(读值即出错)
int *pi =new int();//但加个括号就是值初始化,虽然括号里面没值,但是会相当于*pi赋0。

可以使用直接初始化
int *pi=new int(1024);//pi指向的对象的值为1024
string *ps =new string(10,’9’);ps指向的值为” 9999999999”

为了防止内存耗尽,在动态内存使用完毕后,必须将其归还给系统。我们通过delete表达式来将动态内存归还给系统。delete表达式接受一个指针,指向我们想要释放的对象。
delete p;//p必须指向一个动态分配的对象或是一个空指针

二、动态数组

int *pia = new int[get_size()];
//pia指向第一个int,get_size是一个能返回需要创建的数组的大小的函数

释放动态数组
为了释放动态数组,我们使用一种特殊形式的delete(就是在delete后面加上一个空括号)
delete p;//p必须指向一个动态分配的对象或为空
delete [] pa;//pa必须指向一个动态分配的数组或为空

动态分配与释放二维数组

①两维都不清楚时

int *a = NULL;//指针的指针
int Xlength, Ylength;
cin >> Xlength >> Ylength;/二维数组的动态分配*/
a = new int *[Xlength];
for (int i = 0; i < Xlength; i++)
   a[i] = new int[Ylength];
/释放/
for (int i = 0; i < Xlength; i++)
   delete [] a[i];
delete a;

②当知道第二维y=2时,

int (*p)[2]=new int[x][2];//等号左边为创建一个指针,它指向一个二维数组,右边就有点纵向扩展的意思。
delete[] p;

③当知道第一维x=4时,

int *p[4];//创建一个数组p,它有四个int指针元素
for (int i = 0; i < 4; ++i)
{
    p[i] = new int[y];//每个指针分配内存
}
for (int i = 0; i < 4; ++i)
{
        delete[] p[i];

}

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注