Точная ошибка, которую я получаю:
Невозможно dynamic_cast 'object' (типа 'void *') набрать 'class udDator (int) *' (источник не является указателем на класс)
Это происходит внутри переопределенного оператора delete.Я пытаюсь создать шаблонный класс управления памятью, который может наследовать любой другой класс, управляя памятью по ссылкам.Это было бы вместо чего-то вроде интеллектуального shared_ptr, в попытке сделать управление памятью еще более невидимым, и без дополнительной типизации (shared_ptr 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" );