我得到的确切错误是:
不能将'object'('void *'类型)动态转换为'class 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" );