|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 | |
|
Senior Member
Iscritto dal: Feb 2006
Messaggi: 1304
|
[C++]left of 'method' must point to class type
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 Codice:
/// 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);
}
Quote:
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?
|
|
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Feb 2006
Messaggi: 1304
|
Uhm risolto... era banale infine.
new e delete sono static anche se non c'è scritto. memoryAllocator invece non lo era... per cui è bastato renderlo static ![]() PS: Consiglio l'uso di nedmalloc
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 07:01.



















