免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: windyrobin
打印 上一主题 下一主题

c++ ::operator new 与 malloc 关系 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2009-12-21 17:41 |只看该作者
第一种情况,只要用VC跟一下的代码,实现就出来了

论坛徽章:
0
12 [报告]
发表于 2009-12-21 18:14 |只看该作者
哦,看了那篇冒号学堂 ,ducking type ,受益匪浅
http://m.cnblogs.com/51646/1444394.html


STL 的本质或许就是concepts吧,不过俺c++ 比较菜,SGI STL 能看懂,
但MCD 这种书 就搞得俺有点眼花缭乱啦,还是多学习语言应用技巧吧!

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
13 [报告]
发表于 2009-12-21 19:22 |只看该作者

回复 #12 windyrobin 的帖子

冒号学堂老版本的不错, 新版本的有点……  为了比喻而比喻, 为了排比而排比, 很牵强……

嗯, 只要能理解这种现在还不流行的ducking type思想,STL一点都不难, 一个典型的ducking type构建的框架。
很多人觉得STL很难理解, 也正是因为他暗含了一种新的、不被熟悉的、和以往经验不符的思想, 过了这个坎就是一马平川了。

MCD……  那确实是神作……

论坛徽章:
0
14 [报告]
发表于 2009-12-22 10:15 |只看该作者
new后,编译器会自动插入运行构造函数。
而malloc不会。

论坛徽章:
8
CU大牛徽章
日期:2013-04-17 10:59:39CU大牛徽章
日期:2013-04-17 11:01:45CU大牛徽章
日期:2013-04-17 11:02:15CU大牛徽章
日期:2013-04-17 11:02:36CU大牛徽章
日期:2013-04-17 11:02:58技术图书徽章
日期:2013-12-04 10:48:50酉鸡
日期:2014-01-03 10:32:30辰龙
日期:2014-03-06 15:04:07
15 [报告]
发表于 2009-12-22 10:38 |只看该作者
operator new(new运算符)和 new operation(new操作)是两码事——more effect c++

C++里,new有两种语义: 当你new一个东西时,它是一个关键字;使用这个关键字的操作就叫new操作。

new操作可粗略的分为两步:
1、调用operator new(new运算符)得到内存
2、调用构造函数在得到的内存上完成初始化工作


注意new关键字(或者说new操作)是不可重载的——C++也没有关键字重载机制。

能重载的东西是new运算符。

new运算符起的作用,就是搞到一块内存出来——不管这块内存是栈上保留的还是堆上分配的,也不管这块内存是直接调用malloc取得的还是通过内存池动态分配的——总之,这个运算符必须弄到一块合适大小的内存并返回指向它的指针。

默认情况下,new运算符和malloc基本是等同的;但C++允许你通过重载的方式自行扩展,使得new运算符背后完成的工作任意复杂——只要最后它能给出合适大小、可读写的内存就行。

甚至于,你可以把new运算符实现为:先在外部弄到一个指针(随便怎么弄,如buf=malloc(size)或者 char buf[size])、然后把这个指针当参数传进来(placement new)、最后让你的new运算符原封不动的把这个外部传来的指针交给new关键字。

[ 本帖最后由 shan_ghost 于 2009-12-22 10:44 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP