C++对象模型(四)
2010-11-21 20:37
106 查看
指向数据成员的指针
使用指向数据成员的指针,关键是看这个类的vptr
放在类的哪个部位。一般放在头部或尾部。
对于某些编译器,往往还用在位移上加一个字节。加这个字节的目的是,区分没有指向任何数据成员的指针和已经指向一个数据成员的指针。因为,如果没有这个字节,当指针指向第一个类成员时,有可能和空指针的内容相同。
在VC
编译器中,没有该附加的字节。
#include <stdio.h>
class Pointnd
{
public:
virtual test(){int i = 0;};
// static Pointnd origin;
float x, y, z;
};
void main()
{
Pointnd origin;
printf("::x = %p/n", &Pointnd::x);
printf("::y = %p/n", &Pointnd::y);
printf("::z = %p/n", &Pointnd::z);
printf("origin.x = %p/n", &origin.x);
printf("origin.y = %p/n", &origin.y);
printf("origin.z = %p/n", &origin.z);
}
VC输出结果:
::x = 00000004
::y = 00000008
::z = 0000000C
origin.x = 0012FF74
origin.y = 0012FF78
origin.z = 0012FF7C
而在solaris8中,加了这个字节:
::x = 5
::y = 9
::z = d
origin.x = ffbefac8
origin.y = ffbefacc
origin.z = ffbefad0
发现这本书越看越慢了。主要是本书的内容确实比较高级,而且作者的思维又比较发散,要将书中的干货提出来确实需要时间。希望能继续坚持下去。
使用指向数据成员的指针,关键是看这个类的vptr
放在类的哪个部位。一般放在头部或尾部。
对于某些编译器,往往还用在位移上加一个字节。加这个字节的目的是,区分没有指向任何数据成员的指针和已经指向一个数据成员的指针。因为,如果没有这个字节,当指针指向第一个类成员时,有可能和空指针的内容相同。
在VC
编译器中,没有该附加的字节。
#include <stdio.h>
class Pointnd
{
public:
virtual test(){int i = 0;};
// static Pointnd origin;
float x, y, z;
};
void main()
{
Pointnd origin;
printf("::x = %p/n", &Pointnd::x);
printf("::y = %p/n", &Pointnd::y);
printf("::z = %p/n", &Pointnd::z);
printf("origin.x = %p/n", &origin.x);
printf("origin.y = %p/n", &origin.y);
printf("origin.z = %p/n", &origin.z);
}
VC输出结果:
::x = 00000004
::y = 00000008
::z = 0000000C
origin.x = 0012FF74
origin.y = 0012FF78
origin.z = 0012FF7C
而在solaris8中,加了这个字节:
::x = 5
::y = 9
::z = d
origin.x = ffbefac8
origin.y = ffbefacc
origin.z = ffbefad0
发现这本书越看越慢了。主要是本书的内容确实比较高级,而且作者的思维又比较发散,要将书中的干货提出来确实需要时间。希望能继续坚持下去。
相关文章推荐
- 深度探索C++ 对象模型【第一章3】
- 深度探索c++对象模型 小结【转】
- C++对象模型学习系列(一)
- 深入理解C++的对象模型
- C++对象模型 多重继承与虚函数表
- C++对象模型的那些事儿之一:对象模型(上)
- 三十二、C++内存布局,对象大小计算、虚函数虚继承对类内存模型的影响
- C++对象模型
- C++对象模型(五):The Semantics of Data Data语义学
- C++对象模型笔记:dynamic binding
- 《深度探索c++ 对象模型》有感之默认构造函数,拷贝构造函数,拷贝运算符的合成
- Microsoft Visual C++虚拟多继承 对象模型初步分析
- [C++对象模型][8]多重继承与虚函数表
- 深度探索C++对象模型复习和学习 第六章:执行期语意学
- [C++对象模型][10]类型转化
- 宋体、构造函数-浅出C++对象模型——理解构造函数、析构函数执行顺序-by小雨
- C++ 对象模型具体评论(特别easy理解力)
- C++对象模型——Virtual Member Functions (虚拟成员函数)(第四章)
- 深入探索C++对象模型之七 --- 站在对象模型的尖端
- 虚函数与多态(一):虚函数表指针、虚析构函数、object slicing与虚函数、C++对象模型图