博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++之new和malloc差别
阅读量:5090 次
发布时间:2019-06-13

本文共 1527 字,大约阅读时间需要 5 分钟。

     在C++程序猿面试中。非常easy被问到new 和 malloc的差别。偶尔在quora上逛。看到
Robert Love的总结
。才发现自己仅仅知道里面的一两项就沾沾自喜,从来没有像这位大牛一样去细致思考这些问题,借着这篇文章细致探讨下这个经典问题。
一、new是操作符。而malloc是函数
void* malloc(size_t);void free(void*);
void *operator new (size_t);void operator delete (void *);void *operator new[] (size_t);void operator delete[] (void *);

二、new在调用的时候先分配内存,在调用构造函数。释放的时候调用析构函数。

#include 
using namespace std;class Player{public: Player(){ cout << "call Player::ctor\n"; } ~Player(){ cout << "call Player::dtor\n"; } void Log(){ cout << "i am player\n"; }};int main(){ cout << "Initiate by new\n"; Player* p1 = new Player(); p1->Log(); delete p1; cout << "Initiate by malloc\n"; Player* p2 = (Player*)malloc(sizeof(Player)); p2->Log(); free(p2);}

输出结果为:

Initiate by new

call Player::ctor

i am player

call Player::dtor

Initiate by malloc

i am player

三、new是类型安全的,malloc返回void*
四、new能够被重载
五、new分配内存更直接和安全
六、malloc 能够被realloc
#include 
using namespace std;int main(){ char* str = (char*)malloc(sizeof(char*) * 6); strcpy(str, "hello"); cout << str << endl; str = (char*)realloc(str, sizeof(char*) * 12); strcat(str, ",world"); cout << str << endl; free(str);}

输出结果为:

hello

hello,world

七、new错误发生抛出异常。malloc返回null

八、malloc能够分配随意字节,new 仅仅能分配实例所占内存的整数倍数大小

结论:

学习知识的时候假设能把握整个技术的发展历史和脉络,这样对有些比較难懂的知识就非常easy理解了。

将这些技术放在其所存在的年代,考虑到当时的软硬件环境。能够更好的理解技术本身。

这篇文章是非常浅层次的说明了他们的差别。假设有兴趣能够去研究他们的详细实现。能发现更大的乐趣。

转载于:https://www.cnblogs.com/llguanli/p/8492561.html

你可能感兴趣的文章
myeclipse集成jdk、tomcat8、maven、svn
查看>>
查询消除重复行
查看>>
Win 10 文件浏览器无法打开
查看>>
HDU 1212 Big Number(C++ 大数取模)(java 大数类运用)
查看>>
-bash: xx: command not found 在有yum源情况下处理
查看>>
[leetcode]Minimum Path Sum
查看>>
内存管理 浅析 内存管理/内存优化技巧
查看>>
hiho1079 线段树区间改动离散化
查看>>
【BZOJ 5222】[Lydsy2017省队十连测]怪题
查看>>
第二次作业
查看>>
【input】 失去焦点时 显示默认值 focus blur ★★★★★
查看>>
Java跟Javac,package与import
查看>>
day-12 python实现简单线性回归和多元线性回归算法
查看>>
Json格式的字符串转换为正常显示的日期格式
查看>>
[转]使用 Razor 进行递归操作
查看>>
[转]Android xxx is not translated in yyy, zzz 的解决方法
查看>>
docker入门
查看>>
Android系统--输入系统(十一)Reader线程_简单处理
查看>>
监督学习模型分类 生成模型vs判别模型 概率模型vs非概率模型 参数模型vs非参数模型...
查看>>
Mobiscroll脚本破解,去除Trial和注册时间限制【转】
查看>>