繁体   English   中英

无法dynamic_cast void *到模板化类

[英]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仅可用于对象的指针和引用。 其目的是确保类型转换的结果是所请求类的有效完整对象。

http://www.cplusplus.com/doc/tutorial/typecasting/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM