C++动态内存管理

在学习C++之前,我们了解到C语言实现动态开启内存空间有malloc,realloc,calloc三种方式。都是在堆上开辟。

  • C语言动态开辟空间的方式:

:malloc指开辟size大小的空间

:realloc指将ptr的空间重新开辟为size大小的空间

:calloc指分配num个size大小的空间

以上三种开辟空间成功返回首地址,失败返回NULL。

 

  • C++动态开辟空间方式:

在C++中通过操作符new和delete进行动态内存管理。首先我们来看一下其书写的注意形式:我们发现在使用delete[ ] ptr3的时候并没有写应该释放的个数,那是因为在开辟n个对象之前,先开申请了四个字节用来存放个数N,在其下面再开辟连续空间。

C++中的new是操作符(关键字),而不是函数。那么new是如何实现的呢?

     1.内置类型:如果申请的是内置类型,new/delete和malloc/free是没有什么区别的,但是在申请空间失败的时候,new会抛出异常,而malloc则返回NULL。

     2.自定义类型:new[N]的时候先申请空间,再构造N个对象,执行N次构造函数。delete[ ]时先调用N次析构函数,再释放空间。

 

  • 那么malloc/free和new/delete有什么区别呢?
  1. malloc/free是函数,而new/delete是操作符
  2. malloc申请的空间不能初始化,而new可以,如int new(10);
  3. malloc申请空间时需要计算所需要的大小,而new只需要int new[10]
  4. malloc在返回时需要进行强制转换,而new只需在前加上类型即可
  5. malloc开辟空间失败返回NULL,所以需要判空,new开辟失败抛出异常,所以需要捕获异常
  6. malloc只能开辟内置类型空间,而new可以开辟自己定义类型空间

动态内存开辟,不要忘记释放,否则就会造成内存泄露---指因为忘记或错误造成程序未能释放掉已开辟的空间,而这些空间已经不能再使用,失去了对该段内存的控制,因而造成内存上的浪费。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值