C++学习笔记之1:使用相同形式的new和delete

本文探讨了C++中new和delete操作符的正确使用方法,并强调了它们与C语言中malloc和free的区别。通过实例说明了如何避免内存泄漏,特别是在处理数组时的注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先,从c到c++我们就应该抛弃malloc和free而用new和delete来代替之。
而malloc&free和new&delete的主要区别是new不但为一个对象申请了一片内存同时还会调用这个对象的构造函数,在这个构造函数里可能还会去申请内存,而malloc是不会这么智能的,free则是new的反向执行。所以明确一个问题是:
   malloc&free和new&delete不可以混用,比如用new申请而用free释放。
那么在使用new和delete还要注意些什么呢?先看一段小代码:

==C代码

    /* 申请一片内存 */
     char *p = (char *)malloc(1000);
         .
         .
         .
      free(p);

如果你沿用C语言的习惯,那么在C++的代码中应该是这样的:

     string *p = new string[1000];
      .
      .
      .
     delete p;
如果你这样的话将会造成灾难性的后果,上面的C++代码中所建立的1000个string对象只有第一个被删除,剩余的999个就不知道跑到哪里去了,这是内存泄露的典型例子,切记!那应该怎么样呢?应该用以下方式:
    delete [ ] p; 
这个方括号很重要,告诉系统你要释放的是一个数组而不是一个单一的指针。

如果你仅仅申请了一个对象,那么删除的时候应该怎么释放呢?如:
     string *p = new string;
释放时应该用
    delete p;
而不能是    delete [ ] p; 如果你加了括号则结果是不可预知的,换句话说就是什么都可能发生:)

总结一下,使用new和delete的时候一定要注意前后匹配,如果你申请的是一个数组,那么释放的时候一定要加方括号;如果你仅仅申请了一个对象,那么释放时千万不要加上方括号!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值