虛擬指針的問題——memset相關(guān)
















































有一個虛方法IsLeaf來判斷是否為葉子節(jié)點。
下面有這樣的測試代碼:
test()
{
Node *node = new InternalNode();
memset(node,0,sizeof(InternalNode));
node->IsLeafNode();
}
上述代碼編譯正常,而運行時出錯!
出現(xiàn)上述問題的原因是:
對于有虛函數(shù)的類,每一個類有一個虛函數(shù)表,而每一個對象中會有一個指針指向這個虛函數(shù)表。
當(dāng) Node *node = new InternalNode();時編譯器會把一個指針知道InternalNode的虛函數(shù)表
但是memset(node,0,sizeof(InternalNode));卻把這個指針設(shè)成了。
所以在調(diào)用的時候出現(xiàn)了運行時錯誤!
posted on 2011-03-14 15:46 呆人 閱讀(443) 評論(0) 編輯 收藏 引用 所屬分類: 數(shù)據(jù)結(jié)構(gòu)