【面试】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;
如有不正之处,望指正。
------------------------------我在一步步爬坑--------------
- 【面试】New 和 Malloc 区别
- malloc和new区别
- malloc和new区别
- new和malloc区别?
- malloc和new区别
- new和malloc区别
- malloc和new区别
- new和malloc区别
- malloc 和new 区别
- malloc和new区别
- new和malloc区别
- new和malloc区别
- malloc和new区别
- new和malloc区别
- new和malloc区别
- 面试中关于 new 和 malloc 的区别
- new和malloc的区别
- new和malloc的区别
- DataNode连接错误Retrying connect to server
- 崔健蓝色骨头演唱会
- bluetooth控制Arduino单片机的红外发射装置(一)——Arduino部分
- C++类型重定义详解
- 性能调优之页面静态化
- 【面试】New 和 Malloc 区别
- java实现简单的单点登录
- 项目1:ItcastOA(2):日志说明、BaseDao和BaseDaoImpl的设计
- uva 11991 Easy Problem from Rujia Liu?(map应用)
- fedora20 64bit安装后的操作
- Linux Unix shell 编程指南学习笔记(第五部分)
- 百度实习面试详谈
- C# LIST和STRING互相转换
- webstorm和phpstorm的注册码 绝对好用