C++思考——1、请简述new/delete 与malloc()/free()的区别。 2、请思考一下引用与指针有什么区别?

------第1 题答案

malloc()/free()是C 语言的标准库函数,new/delete 是C++的运算符,它们都可用于申请
动态内存和释放内存,new/delete 在实现上其实调用了malloc()/free()函数,然后又做了一些
其他封装,所以两者虽有相似却又有不同。

(1) new 创建对象时返回的是直接带类型信息的指针,而malloc()返回的都是void*类
型的指针。

(2)两者在创建对象时都可能造成内存泄露,但new 可以定位到哪个文件的哪一行,
而malloc()没有这些信息。

(3)对于非内置类型对象而言,new/delete 在创建对象时不止是分配内存,还会自动执
行构造函数进行初始化,对象消亡之前自动执行析构函数,而malloc()/free()只能简单的分
配释放内存。

(4)new 与malloc()申请内存位置不同,new 从自由存储区(free store)分配,而malloc()
从堆区(heap)分配(请参考ISO14882 内存管理部分),free store 和heap 很相似,都是动
态内存,但位置不同,这就是为什么new 出来的内在不能通过free()释放。但大部分编绎器
并没有很好的执行这一条标准,很有可能把free store 和heap 混淆起来,因此有时使用free()
释放new 出来的对象也不会报错,但这会造成程序的可读性差,所以还是要各自配对使用。

-----第2 题答案

(1)引用只是其他变量的别名,而指针是一个实体;

(2)引用只能在定义时被初始化一次,之后不可变;而指针可以被多次赋值,改变指向;

(3)引用不能不空;而指针可以为空;

(4)用sizeof()运算符求算其大小时,引用得到的是所指向变量的大小;而指针得到的
是指针本身的大小。

(5)引用是类型安全的,由于不存在空引用,并且引用一旦被初始化就只能指向一个变
量,因此它是安全的;而指针不是,指针可以随时改变指向,并且可以不初始化,也可以为
空,所以在使用时不安全;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值