malloc/free和new/delete

1.        malloc/free是函数,而new/delete是关键字。

2.        malloc成功后返回void *指针,需要强转,失败则返回NULLnew成功后返回指向对象的指针,失败抛出异常。虽然C++尽最大的可能去兼容C语言的特性,new失败也会返回NULL,但很少使用。

3.        malloc申请空间时要指明申请空间的大小,而new只需要对象名就可以了。

4.        malloc是从堆上开辟内存,而new是从自由存储区开辟内存(是C++抽象出来的概念,不仅是堆上的存储空间,还可能是静态存储区)。

5.        malloc不仅可以申请单个对象还可以为数组申请空间,都用free()释放。而new要用new[size]  delete [size]进行申请和释放对象空间。(虽然内置类型不影响,但是释放自定义类型时,可以将对象的个数写入size位置。

6.        malloc申请的内存不够时,可以用realloc解决。而new没有直接的办法解决。但是它会触发new_handler机制,查看用户有没有设置set_new_handler句柄,该句柄的作用是如果设置,尝试从操作系统申请内存,如果实在申请不到就抛出bad_alloc异常。

7.        newdelete还会调用构造和析构函数。

 

指针和引用的区别

 

1.    指针占用具体的空间,但是引用只是变量的别名

2.    32位系统下,sizeof指针是4个字节,sizeof引用则是它所指向的具体的对象的大小。

3.    有多级指针,但是只有一级引用。

4.    指针可以被初始化为NULL,但是引用必须要初始化为已存在得对象的引用。(引用在三种情况下,可以不需要初始化

1.    引用作为形式参数时,由调用者传来的实参进行初始化

2.    引用作为外部变量时,可以在任何地方进行初始化

3.    作为类的数据成员时,由类的构造函数进行初始化)

5.    指针作为参数时要操作它指向的参数要进行解引用,而引用则直接进行修改它所引用的变量。

6.    指针的指向可以改变,而引用变量只能引用一个变量。

7.    指针++和引用++的意义是不一样的。

 

编译器不允许把一个结构体强转为任何其他类型。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值