C++动态内存分配

C++中将堆称为空闲存储器。
为了实现动态的内存分配,会用到最重要的两个操作符:new 和 delete

例1:为了给一个int类型的变量分配内存,先声明一个int类型的指针然后再使用new操作符给这个变量分配与类型相符合的内存。变量使用完成后要销毁变量,使用delete操作符。

int* Var{nullptr};
Var = new int;
/*对变量的操作,省略*/
delete Var;/*释放Var的内存*/
Var = nullptr;/*删除后置NULL*/

上面的操作还存在其它的语法:

int* Var{new int};
/*操作,省略*/
delete Var;
Var = nullptr;

例2:给一个char类型的数组动态分配32个字节大小的内存。

char* Str{nullptr};
Str = new char[32];
/*对数组的操作,省略*/
delete [] Str;/*释放Str的内存*/
Str = nullptr;/*删除后置NULL*/

类似的语法:

char* Str{new char[32]};
/*操作,省略*/
delete Str;
Str = nullptr;

例3:多维动态数组分配

char Strs{new char[8][16]};
double Dflt{new double[32][64]};
auto Atallc = new int[4][8][16];
/*等等,还有很多写法*/
/*多维数组的删除与一维的删除方式一样,同样使用delete [] name;*/

注:使用new操作类对象的时候它会自动调用类的构造函数。

//定义一个类对象
class CClass
{
public:
    CClass(int a);
}
//使用new操作符
CClass* pClass{new CClass{123}};

此种方法可以以123作为实参来构造对象CClass并将其地址赋给pClass。

C++语言的语法是很灵活的。同样完成上面的操作还有许多写法,但是为了有养成良好的习惯,还是应该分步骤进行。


规律总结:分配内存的时候new操作符后面接要分配内存的变量类型,应该与指针的类型相匹配。当给数组分配内存的时候直接在此处的变量类型后面加方括号,里面写上分配的数目即可。注意多维数组仅限于用变量指定最左边那一维,例如:new int[var][4][4];


注意事项:程序结束时系统将释放空闲存储器中分配的内存,但一定要养成使用完内存后释放的习惯。否则容易造成内存泄漏,并且释放后需要将变量指针置为NULL.


为了避免内存泄露应该使用STL库中的智能指针,让其自动管理内存。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值