作者kafy (杀破狼...杀~~~)
看板Programming
标题Re: [问题] 奇怪的pointer assign问题...
时间Sat Jun 24 01:22:59 2006
※ 引述《kafy (杀破狼...杀~~~)》之铭言:
: 我使用的环境是VC6.0,配合DirectX9.0的sdk,
: 我把范例的code用自己的方式给整理过,
: 结果同样的一段code section在run的时候发生了很奇怪的问题,
: 假设有两个class
: class D3DXFRAME {...};
: class D3DXFRAME_EX : public D3DXFRAME { ... };
: run以下的Code,
: D3DXFRAME_EX *testptr1 = new D3DXFRAME_EX;
: D3DXFRAME *testptr2 = NULL;
: testptr2 = testptr1;
: 假设testptr1 new出来的值是0x00d01530
: 在assign给testptr2的时候居然自动加4了,
: 也就是testptr1 assign给testptr2的是0x00d01534
: 这真是太神奇了!!!!
: 有没有人遇过相同的问题,然後知道为什麽的吗?
我测试了一下,修改正确了,大概知道为什麽
原本的D3DXFRAME算是Struct物件,里面的定义只有很单纯的member variable而已,
但是D3DXFRAME_EX我定义成class,而里面的deconstructor是virtual的,
让D3DXFRAME_EX变成virtual class,
所以多了一个隐形的member variable, __vfptr
指标向上转型导致父类别field的起始位址与子类别的起始位址不同所照成的,
我把virtual这个modifier拿掉就可简单的解决问题,
可是有没有不用拿掉的作法呢?
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.217.210.24