Tommo
05-04-2009, 13:25
Salve,
sto provando ad implementare un custom memory allocator nel mio framework, obbligando tutte le classi ad ereditare una "base class" che fa l'override degli 8 new/delete.
Dentro a questi new/delete chiamo i metodi malloc/free di una classe polimorfica così da cambiare a piacimento il metodo di allocazione.
Il codice interessato è questo:
CPP
/// operator new, with debug line info
void* BaseObject::operator new(size_t sz, const char* file, int line, const char* func)
{
return memoryAllocator->malloc(sz, file, line, func);
}
void* BaseObject::operator new(size_t sz)
{
return memoryAllocator->malloc(sz);
}
/// placement operator new
void* BaseObject::operator new(size_t sz, void* ptr)
{
return memoryAllocator->place( sz, ptr );
}
/// array operator new, with debug line info
void* BaseObject::operator new[] ( size_t sz, const char* file, int line, const char* func )
{
return memoryAllocator->malloc(sz, file, line, func);
}
void* BaseObject::operator new[] ( size_t sz )
{
return memoryAllocator->malloc(sz);
}
void BaseObject::operator delete( void* ptr )
{
memoryAllocator->free(ptr);
}
// Corresponding operator for placement delete (second param same as the first)
void BaseObject::operator delete( void* ptr, void* )
{
memoryAllocator->free(ptr);
}
// only called if there is an exception in corresponding 'new'
void BaseObject::operator delete( void* ptr, const char* , int , const char* )
{
memoryAllocator->free(ptr);
}
void BaseObject::operator delete[] ( void* ptr )
{
memoryAllocator->free(ptr);
}
void BaseObject::operator delete[] ( void* ptr, const char* , int , const char* )
{
memoryAllocator->free(ptr);
}
e gli errori di questo tipo:
d:\dev\cudarenderer\src\baseobject.cpp(48) : error C2227: left of '->malloc' must point to class/struct/union/generic type
Cioè, non riesce a trovare che cosa sia memoryAllocator.
La cosa strana è che negli altri metodi nello stesso .cpp, riesce a trovarlo ed usarlo.
Solo negli overload di new e delete non riesce...
Qualche idea? :stordita:
sto provando ad implementare un custom memory allocator nel mio framework, obbligando tutte le classi ad ereditare una "base class" che fa l'override degli 8 new/delete.
Dentro a questi new/delete chiamo i metodi malloc/free di una classe polimorfica così da cambiare a piacimento il metodo di allocazione.
Il codice interessato è questo:
CPP
/// operator new, with debug line info
void* BaseObject::operator new(size_t sz, const char* file, int line, const char* func)
{
return memoryAllocator->malloc(sz, file, line, func);
}
void* BaseObject::operator new(size_t sz)
{
return memoryAllocator->malloc(sz);
}
/// placement operator new
void* BaseObject::operator new(size_t sz, void* ptr)
{
return memoryAllocator->place( sz, ptr );
}
/// array operator new, with debug line info
void* BaseObject::operator new[] ( size_t sz, const char* file, int line, const char* func )
{
return memoryAllocator->malloc(sz, file, line, func);
}
void* BaseObject::operator new[] ( size_t sz )
{
return memoryAllocator->malloc(sz);
}
void BaseObject::operator delete( void* ptr )
{
memoryAllocator->free(ptr);
}
// Corresponding operator for placement delete (second param same as the first)
void BaseObject::operator delete( void* ptr, void* )
{
memoryAllocator->free(ptr);
}
// only called if there is an exception in corresponding 'new'
void BaseObject::operator delete( void* ptr, const char* , int , const char* )
{
memoryAllocator->free(ptr);
}
void BaseObject::operator delete[] ( void* ptr )
{
memoryAllocator->free(ptr);
}
void BaseObject::operator delete[] ( void* ptr, const char* , int , const char* )
{
memoryAllocator->free(ptr);
}
e gli errori di questo tipo:
d:\dev\cudarenderer\src\baseobject.cpp(48) : error C2227: left of '->malloc' must point to class/struct/union/generic type
Cioè, non riesce a trovare che cosa sia memoryAllocator.
La cosa strana è che negli altri metodi nello stesso .cpp, riesce a trovarlo ed usarlo.
Solo negli overload di new e delete non riesce...
Qualche idea? :stordita: