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