我得到确切的错误是:不能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