我得到確切的錯誤是:不能dynamic_cast的無效*到模板類
不能dynamic_cast的「對象」(類型爲「無效*」)鍵入「類udDator(INT)*」 (源不是指向一個類的指針)
這發生在重寫的操作符刪除內部。我試圖創建一個模板化的內存管理類,可以繼承到任何其他類,通過引用管理內存。這將代替聰明的shared_ptr,試圖使內存管理變得更加隱蔽,並且不需要額外的輸入(shared_ptr < someClass> shared(new someClass())有點長......)。
無論如何,這裏是相關的代碼。如果我忘記提及任何細節,或者沒有需要查看的代碼,請告訴我。
重寫操作:
template< class T >
class udSharedMemory
{
public:
void operator delete(void *object)
{
T *temp = dynamic_cast< T* >(object); //<------ ERROR!
assert(temp && "Something went wrong during casting");
temp->release();
}
}
模板類:
template< class T >
class udDator : public udMemoryManaged, public udSharedMemory< udDator<T> >
{
// stuff
};
的模板類的用法:
udDator<int> *test = new udDator<int>("5");
這是一些非常好的信息,非常感謝您發佈此信息。我會考慮它。不過,我會標記另一個答案,因爲從技術上講,這是我發佈的問題的直接解決方案。我希望我可以設置你的解決方案作爲答案... – Freezerburn 2010-07-01 05:37:54