[英]Cannot dynamic_cast void* to templated class
我得到的确切错误是:
无法dynamic_cast“对象”(类型为“ void *”)以类型为“ class udDator(int)*”(源不是指向类的指针)
这是在重写的运算符删除中发生的。 我试图创建一个可以继承到任何其他类的模板化内存管理类,并通过引用来管理内存。 这将代替诸如smart 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" );
在C ++中,无法检查指针是否确实包含给定多态类型的对象的地址 。
您需要有一个指向其中一个基准的指针。 例如,从一个多态接口派生所有相关的对象,使用void指针,将其强制转换为该接口,然后从那里可以将其动态强制转换为执行运行时检查所需的类型。
动态转换需要多态行为,而void
没有。 请改用static_cast
。
dynamic_cast
仅可用于对象的指针和引用。 其目的是确保类型转换的结果是所请求类的有效完整对象。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.