new与malloc比较,QQ农场与大草原?

         前几天看到微信群里有人在讨论new与malloc的不同之处,看到有人说malloc不如new,细细看他所列举的为什么new比malloc好的原因,感觉很有道理,但是转念一想,突然间我又觉得语言这种东西为什么一定要分出个谁好谁差呢?任何一个就比如说是英语和汉语,汉语中的一个成语,英语却要一个句子来表达,但是有的时候英语表达又要比汉语表达方便(当然这只是我的个人见解)。在C语言或者C++之中也一样,有时候可以有多种表达方式可以达到相同的效果,就比如C语言之中,有时候用指针方便,有时候使用数组方便,但是很多时候,它们的所能达到的效果确是差不多的。(例子还有很多,比如C++之中如何在类外能访问到类内的私有成员,这里就不仔细展开分析了)。

         如果要问我new与malloc哪个更好,很抱歉,真的不好说(在不指定哪个方面的情况之下),就好比詹姆斯与梅西谁更强(可能比喻有点不恰当),这样的问题在不指定哪个方面,更确切的谁是哪个领域的情况下还真回答不了。在篮球领域当然是詹姆斯强,但是在足球领域自然是梅西更强。不过这两者都有相同点,那就是他们的速度都很快(new与malloc也有相同点,都可以动态的开辟内存)new在C++之中比malloc要用的广泛的多,不过C语言中没有new,自然是malloc一统天下的局面。C++之中可以有malloc,毕竟malloc也有自己的特点,C++之中还是支持它的,可以这样理解:(两个都是我喜欢的球星,这里我只是做了一个“不恰当”的比喻,如果你是他们俩的球迷,请多多包涵,昨天恰好是NBA总决赛的第一天,支持的老詹却输了,后面几场要加油啊,为家乡带来总冠军的时候到了)如果让詹姆斯去改行踢足球,相信还是有球队会要他的,毕竟身体条件摆在那里。同样让梅西去NBA当个后卫,速度不在话下,但是有的方面(比如身高方面)就很吃亏(就像new无法直观地处理已分配内存的扩充),(除非NBA加条规则,后卫出手不准盖帽,没有任何嘲笑的意思,他是我最喜欢的足球运动员),new与malloc也一样,在C++之中有时候new可以办到的,malloc却有些难办到。

         上面这个只是一个不太恰当的比喻,来个更形象的比喻,就是题目中我所说的它们两个的区别就像QQ农场(new)与大草原(malloc)的区别。来看一下图你就可以更好的理解了:

         new操作符帮你划好了田地的分块(数组),帮你播了种(构造函数),delete的时候还会帮你清理,还提供了其他的设施给你使用:

       而malloc给你的就好像一块很大土地,就像一个大草原(还是一个原始草原),你要干什么或者说你要种什么需要自己在土地上来播种。

       还是那句话,它们两个各自都有适用的地方,更准确的说在某些方面都有比另一个优越的地方。不过在C++这种偏重OOP的语言,自然是使用new/delete更适合。

前面说了好多与内容无关的,下面开始切入正题,详细说一说new与malloc的十个区别:

先从内存角度来看一看:

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值