私が得ている正確なエラーは次のとおりです。
'object' (タイプ 'void*') をタイプ 'class udDator(int)*' に dynamic_cast できません (ソースはクラスへのポインタではありません)
これは、オーバーライドされたオペレーターの削除内で発生しています。参照を通じてメモリを管理し、他のクラスに継承できるテンプレート化されたメモリ管理クラスを作成しようとしています。これは、スマートな 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" );