分类: C/C++
2008-05-30 21:11:14
补充:我想到另一个比较直观的方法,就是利用Placement Operator New(PON)的
方法,相对应的还有Placement Operator Delete.至于这些概念,我就不多说了,^_^.
刚才看到那些地址都是内存中的,但可以利用(PON)把那些地址放倒一个数组中
去,那样会更直观,不信,你看着:
#include
#include
class Point2d
{
public:
int _x,_y;//
Point2d(){
_x=10;
_y=20;
}
virtual f(){}
};
class Point3d:public Point2d
{
public:
int _z;
Point3d(){_z=30;}
};
class Vertex
{
public:
int next;
Vertex(){next=40;}
virtual void f(){}
virtual void g(){}
virtual void h(){}
};
class Vertex3d:public Point3d,public Vertex
{
public:
int mumble;
Vertex3d(){mumble=50;}
};
int main()
{
long str[30];
Vertex3d*array=new(str)Vertex3d;
for(int i=0;i
cout<
//这里需要显示调用Vertex3d的析构函数,
return 0;
}
让我慢慢说来,这里的一些类,只是添加了构造函数而已,为的是能够直观.我定义
了一个数组为的放置Vertex3d对象,类型为long是由于上面的类的每个成员都是四
个字节,而虚拟指针(vptr)也是四个字节,这样输出很方便.
Vertex3d*array=new(str)Vertex3d;这条语句就是用了PON方法,在数组str中放置
一个Vertex3d对象,一切都已经做好了,对象的布局就是在数组str中,不妨去看看
str中的内容,这里我就不打算把输出结果写出来了,自己调试.有个缺陷就是看不到
virtual函数的函数地址(虽然有其他的方法,但不直观.vc调试模式下直接就可以看,或许我会想到办法的)
就简单说这么些了,vc编译器的debug模式下可以直接看到的,更直观,但我的
目的只是弄懂c++类究竟是如何放置的(我不认为我是在转牛角尖).