Re: [問題] 奇怪的pointer assign問題...
※ 引述《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
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 3 篇):
Programming 近期熱門文章
PTT數位生活區 即時熱門文章