上一页 1 ··· 4 5 6 7 8 9 下一页
  2010年8月21日
摘要: C++之this指针与另一种“多态”2010-7-9烛秋一、引入 定义一个类的对象,首先系统已经给这个对象分配了空间,然后会调用构造函数(说明:假设存在构造函数--2010.9.5修正)。一个类有多个对象,当程序中调用对象的某个函数时,有可能要访问到这个对象的成员变量。而对于同一个类的每一个对象,都是共享同一份类函数。对象有单独的变量,但是没有单独的函数,所以当调用函数时,系统必须让函数知道这是哪个对象的操作,从而确定成员变量是哪个对象的。这种用于对成员变量归属对像进行区分的东西,就叫做this指针。事实上它就是对象的地址,这一点从反汇编出来的代码可以看到。二、分析1、测试代码://////. 阅读全文
posted @ 2010-08-21 09:53 -银光- 阅读(2278) 评论(3) 推荐(0)
摘要: 编译器对临时变量的优化--简单理解2010-7-6烛秋2010-8-20整理一、问题来源 之前对NRV优化做了一点总结,还有所欠缺,只分析了 A b = f();的情况,没有去分析A b; b = f();的情况。又想起之前看过的书,对产生临时对象的讲解都是假设了编译器没有进行优化,然后说要提高C++程序性能,必须尽量的少使用返回对象,因为那样才不会产生临时对象。多使用引用/指针可以减少临时对象的产生,提高程序性能,这个观点没有错。但事实上很多编译器多做了优化,使得临时对象的产生减少了很多,打算以最简单的例子对编译器的优化做简单的理解。代码:/**//////////////////////. 阅读全文
posted @ 2010-08-21 00:07 -银光- 阅读(2516) 评论(0) 推荐(0)
  2010年8月20日
摘要: 自己动手理解NRV优化2010.6.29烛秋2010.8.20整理说明:本文整理自:http://blog.csdn.net/wuxupeng999/archive/2010/06/29/5701513.aspx一、NRV的简单理解 NRV是Named Return Value的简称。NRV优化简单的说:有一条语句,A a = f();其中f()是一个函数,函数里边申请了一个A的对象b,然后把对象b返回。在对象返回的时候,一般情况下要调用拷贝函数,把函数f()里边的局部对象b拷贝到函数外部的对象a。但是如果用了NRV优化,那就不必要调用拷贝构造函数,编译器可以这样做,把a的地址传递进函数f(. 阅读全文
posted @ 2010-08-20 22:56 -银光- 阅读(2094) 评论(0) 推荐(0)
摘要: C实现“动态绑定”2010-7-26烛秋在论坛上看到这样一个问题:“用C能实现C++的动态绑定吗?”网址:http://topic.csdn.net/u/20100624/21/3d7eda37-cbf7-4e36-a549-f2d6f1a3eeed.html?47092。。现在看当时我的回复(ID:wuxupeng999),觉得理解上还是有些不足,... 阅读全文
posted @ 2010-08-20 22:05 -银光- 阅读(2007) 评论(3) 推荐(1)
摘要: 虚函数表里边保存的不一定是虚函数的地址 我一直以为虚函数表里边保存的就是虚函数的地址,前几天做测试的时候才发现这想法不一定是对的。测试代码://虚函数表里边保存的不一定是虚函数的地址.cpp//2010.8.19/*分析:通过最后的输出结果可以发现,通过Derived类的虚函数表调用所有的虚函数,发现第一张虚函数表的输出①和第二张虚函数表的输出④它们是同一个函数的输出,在虚函数表项上的值却是不同的。如果虚函数表上的项的值都是虚函数的地址,那么Derived的两张表里边用于调用show()函数的表项的值应该是相同的,但事实上它们不同。这说明,虚函数表里边保存的未必就是虚函数的地址。这种情况在之. 阅读全文
posted @ 2010-08-20 16:25 -银光- 阅读(3976) 评论(0) 推荐(1)
摘要: C++对象内存布局测试总结 http://hi.baidu.com/%D6%F2%C7%EF/blog/item/826d38ff13c32e3a5d6008e8.html 上文是半年前对虚函数、虚拟继承的理解。可能有一些错漏。而且只是理解了比较简单的部分,表达也不够清晰,这次决定花的时间再做一次总结。 对于普通的C++对象内存布局,简单得不得了,就不做总结了。这里只总结涉及到虚拟继承的情况。 因为不同编译器对虚拟继承的实现采用不同的方式,所以要完整的分析是不可能的。这里只考虑VS2005/2008,还有简单涉及GCC编译器。1、 单个虚拟继承只是为了分析而已,实际中并没有太大的作用。... 阅读全文
posted @ 2010-08-20 02:07 -银光- 阅读(5267) 评论(5) 推荐(0)
摘要: C++对象内存布局--虚基类表的使用一、测试VS编译器,虚基类表在函数调用时是怎么使用的1、测试代码:2、使用OllyDbg反汇编调试的相关结果:图 1 VC++6.0编译器,OD调试结果图 2 VS2005/2008编译器,OD调试结果3、结果表明,在调用虚基类函数的时候,有使用到虚基类表指针。二、测试GCC编译器,虚基类表在函数调用时是怎么使用的1、测试代码跟上边的一样。2、使用OllyDbg... 阅读全文
posted @ 2010-08-20 01:40 -银光- 阅读(3953) 评论(0) 推荐(0)
摘要: C++对象内存布局--⑩GCC编译器--虚拟继承--菱形继承 阅读全文
posted @ 2010-08-20 01:24 -银光- 阅读(742) 评论(0) 推荐(0)
摘要: C++对象内存布局--⑨VS编译器--虚拟继承--菱形继承 阅读全文
posted @ 2010-08-20 01:20 -银光- 阅读(910) 评论(0) 推荐(0)
摘要: C++对象内存布局--⑧GCC编译器--虚拟继承多个基类 阅读全文
posted @ 2010-08-20 01:17 -银光- 阅读(635) 评论(2) 推荐(0)
上一页 1 ··· 4 5 6 7 8 9 下一页