new与malloc,delete与free区别

  • malloc 只开辟空间 new 不仅开辟空间,系统还会调用构造函数

    free 只收回空间 delete 先调用析构函数 再收回空间

  • new / delete 是关键字或运算符,可以重载

    malloc / free 是函数

  • new返回值类型是安全的,不需要强转;大小由系统计算

    malloc返回值类型不安全,需要强转;大小需要使用者计算

    void* malloc(size_t size);//malloc函数原型
    void free(void* ptr);//free函数原型
    
  • new开辟失败,抛出异常

    malloc开辟失败,返回NULL

  • new的几种不同用法

    //关键字或运算符,开辟空间初始化
    Object *p = new Object(10);
    delete p;//释放p指向的空间,p仍然指向那里
    //只开辟空间,不调用构造函数,开辟失败抛出异常
    Object *s = (Object*)::operator new(sizeof(Object));
    operator delete(s);
    //重定位,不开辟空间,只调用构造函数
    //通过重定位可以在 堆,栈.data区开辟空间,而malloc只能在堆开辟空间
    Object ss;
    Object *q = new(&ss) Object(100);//q指向s
    
  • new还可以初始化,malloc只能开辟空间

    int *p = new int(5);
    //对数组只能进行0初始化
    int *p = new int[6]();
    
  • new可以开辟常量空间,malloc不行

    const int *ptr = new const int(10);
    
  • 开辟连续内存空间,数组

    int *p=new int[5](2);//C++11标准,对数组每个元素进行初始化
    delete[] p;
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值