您不應該刪除void
指針。 delete
適用於特定類型(例如,編譯器知道應該調用哪個析構函數 - 如錯誤消息中所述)。
如果你想在你的結構中保持未指定的類型,你必須以某種方式包裝它。
class DataWrapper
{
public:
virtual void * GetData() = 0;
virtual ~DataWrapper()
{
}
};
class MyDataWrapper
{
protected:
MyData * data;
public:
MyDataWrapper(MyData * newData)
{
data = newData;
}
void * GetData()
{
return data;
}
~MyDataWrapper()
{
delete data;
}
};
struct vStruct
{
MyDataWrapper * vPtr;
struct vStruct *next;
~vStruct()
{
if (vPtr != null)
delete vPtr;
}
};
vStruct sObj;
sObj.vPtr = new MyDataWrapper(new MyData());
// When sObj gets deleted, MyDataWrapper is
// deleted too (thanks to the ~vStruct) and
// in effect, the allocated data is deleted too.
請注意,這是一個簡單的例子,它可以寫得更美觀。
如果其中一個答案解決了您的問題,請不要忘記將其標記爲已接受,這樣可以幫助更多訪問者訪問此網站。 – Spook