【面试】New 和 Malloc 区别

来源:互联网 发布:模块化编程软件 编辑:程序博客网 时间:2024/04/29 12:13

       当我们去面试的时候总会遇到笔试里面会有这个问题,New 和 Malloc 有什么不同?


1: 最大的区别在于:New 是运算符,可以重载。Malloc是函数,可以重写(覆盖)。

       New / Delete 是 C++ 里面的运算符。 Malloc 和 Free是 C++ / C语言标准库函数。他们都是用于动态分配内存和释放内存

       说到重载那么问题来了。什么是重载?

       重载:一般用于在一个类内实现若干重载的方法,这些方法的名称相同而参数不同。

 

       重写(覆盖):一般是用于子类在继承父类是,重写(重新实现)父类中的方法。

       重写(覆盖)的规则:

       1:重写方法的参数列表必须完全与被重写的方法相同。

       2:重写方法的访问修饰符一定要大于或等于被重写方法的访问修饰符(Public > Projected > Default > Private )

       3:重写方法的返回值必须相同

       4:抛出异常必须一致

       5:被重写的方法不能私有的(Private),否则在其子类中只是重新定义了一个方法,并没有实现对其重写

       6:静态方法不能重写为非静态的方法


 

2: New / Delete 可执行构造函数和析构函数,Malloc 和 Free则不能执行构造函数和析构函数。

      New 不止会分配内存,还会调用 构造函数,同理Delete 会调用类的析构函数。Malloc 只会分配内存,不会初始化类成员的工作。

      对于非内部数据类型的对象而言,只是使用Malloc /  Free 无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,在消亡之前自动执行析构函数。

 

3:New 可以认为是Malloc加构造函数的执行。

      New出来的指针都是直接带有类型信息,而Malloc返回的都是Void指针。

      那么什么是Void指针?

      void 是 “无类型”, 那么Void* 则是 “无类型指针”,可以指向任何数据类型。

      Void指针可以指向任意类型的数据,即可用任意数据类型的指针对Void 指针赋值。

   int * pint;   void *pvoid;   pvoid = pint; /* 不过不能 pint= pvoid; */   如果要将pvoid赋给其他类型指针,则需要强制类型转换如:pint= (int *)pvoid;


 

      

如有不正之处,望指正。

 

 

 

 ------------------------------我在一步步爬坑--------------


0 0