动态内存管理



1.malloc realloc calloc函数
malloc和realloc开辟空间 malloc只管开空间,calloc不但开空间还会进行初始化
realloc((1)当ptr==NULL时,realloc等价于malloc
         (2)扩容
   (3)重新开空间会释放旧的空间

2.new / delete 和operator new / operator delete和malloc / free的关系
(1)new / delete和malloc / free的区别
   a、都是动态管理内存的入口
   b、malloc/free只管动态的开空间释放空间,而new/delete不但会开空间释放空间,而且new会先开空间在调构造函数进行初始化,
                                                                                 delete会先调用析构函数清理工作,然后再释放空间
   c、malloc / free需要手动计算类型大小,且返回值为void*
      new / delete会自动进行类型大小的计算并返回相应类型的指针

(2)operator new / operator delete是malloc / free的一层封装,两者用法一样,只管开空间释放空间不会调用对象的构造/析构函数去初始化/清理对象
(3)a、c++是面向过程的语言,有错误不会返回错误码,而是抛异常  对于new来说,new不会直接调用malloc,因为malloc要是错误会返回错误码0,
   不符合c++面向对象的机制,所以要通过调用operator new,出错就会抛异常
   b、opertor new 和operator delete是c++的标准库函数,而不是操作符new / delete的重载

3.new[]时底层处理的机制
(1)new[]会多开四个字节,用来记录次数,指导调用多少次析构函数
(2)当编译器识别析构可调可不调时,比如把析构缺省时,就不会多开四个字节


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值