new/delete与malloc/free的区别

new/delete与malloc/free的区别

1、new/delete在管理内存的同时会调用类的构造函数和析构函数。

      malloc/free仅仅实现了内存的分配和释放,没有调用类的构造函数和析构函数。


2、new/delete是C++语言的运算符关键字。

       malloc/free是C/C++语言的标准库函数。——在使用的时候需要头文件库函数支持。


3、通过new创建的对象具有类型,而malloc的返回值为void*,需要进行强制类型转换。

  ClassA   *a= new ClassA   ;

   ClassA   *a=( ClassA   *a) malloc(sizeof(  ClassA ));


4、new申请内存失败时,会调用new_handler处理函数。

   而malloc申请内存失败时,仅仅返回NULL,不会进行任何善后处理。


new的三种形态

  ClassA   *a= new ClassA   ;

这个语句,完成了三个操作:

       1、通过operator new 申请内存

        2、使用placement new调用构造函数(简单类型如int等 ,忽略此步)

       3、返回内存指针


注意点:

在编程时,new的表达式中使用[],则在delete表达式中也使用[];

在new的表达式中没有使用[],则在delete表达式中一定不要使用[]。

但是在遇到typedef类型对象时,要清楚知道该用哪一种delete。

比如:typedef int  arriMatrix[4];——————定义了int 型大小为4的一个数组的别名 :arriMatrix;

int * parriMatrix=new arriMatrix;

delelte []arriMatrix;








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值