其他分享
首页 > 其他分享> > c – 不能dynamic_cast void *到模板化的类

c – 不能dynamic_cast void *到模板化的类

作者:互联网

我得到的确切错误是:

不能dynamic_cast’对象'(类型为’void *’)来键入’class udDator(int)*’
(source不是指向类的指针)

这发生在重写的运算符delete中.我正在尝试创建一个模板化的内存管理类,它可以继承到任何其他类,通过引用管理内存.这将取代类似智能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" );

解决方法:

动态强制转换需要多态行为,而void则没有.请改用static_cast.

标签:dynamic-cast,c,templates
来源: https://codeday.me/bug/20191007/1865822.html