对象模型如何影响程序
2015-08-27 18:59
162 查看
先看一下一个简单的函数:
编译器做出的一些转换:
X foobar() { X xx; X *px = new X; xx.foo(); delete px; return x; }
编译器做出的一些转换:
void foobar(X& _result) { //按原来的程序需要构造两个临时变量 //所以这里使用引用的方式来返回结果 //调用构造函数 _result.X::X(); //申请内存(其实就是operator new(size_t size)) px = _new(sizeof(X)); //如果申请内存成功就调用构造函数 if( px != 0) px->X::X(); //这里就是成员函数的形式的转换,成员函数其实 //就是一个一般的函数,然后把this指针传入进去 //下面的foo 就是 foo(X* this); foo(&_result); //虚函数的基本调用方式,也就是通过vptr来调用 //vptr指向vtbl,然后直接用->符号即可访问vtbl //然后下标2则可以访问到一个函数指针,所以调用 //就是这样(*xxx)(px) xxx就是取到的指针 //px就是this指针 (*px->vtbl[2])(px); //同上,这是析构函数的多态使用,也需要 //检测指针不为空,因为c++提供一个保证 //就是对NULL进行delete不会出错 if( px != 0) { (*px->vtbl[1])(px); _delete(px); } return; }
相关文章推荐
- 对象模型如何影响程序
- 第一天申请blog,记下申请blog的时间吧
- 两种单例模式的写法
- Mysql在大型网站的应用架构演变
- JSF 2 checkboxes example
- Android TextView 给文本中指定片段添加自定义点击事件
- 小甲鱼Python第十讲课后题
- 纯css玩转三角形
- new关键字的用法
- 黑马程序员训练营十道满分题解
- 如何将oc代码转换成运行时代码
- 内核启动分析(四)——检查,配置环境阶段
- 看<<人人都是产品经理>>读后感
- Windows内核编程基础之使用LIST_ENTRY
- Java学习之自动装箱和自动拆箱源码分析
- 从零单排Opencv---新旧版本函数变化
- php安装完后配置php.ini和php-fpm.conf
- mac 下 sphinx + mysql + php 实现全文搜索(xampp)(4)php api 解析
- MySQL和mariadb的区别
- 【HDU3974】【并查集】【技巧】【代码短时间快】