delete überladen
-
hi,
folgendes funktioniert ohne probleme:
//irgendwas.h static void* operator new(unsigned int size, string sFile, int nLine, string sFunction) { // ... void *p = (void *)malloc(size); return p; } #define new new(__FILE__, __LINE__, __FUNCTION__)
das funktioniert auch ohne probleme
wenn ich aber folgendes versuche:
//irgendwas.h static void operator delete(void *p) { // ... free(p); }
und es mit dem g++ unter linux kompilieren will dann meint der nur:
'void operator delete(void*)' was declared 'extern' and later 'static'
könnt ihr mir sagen was ich machen muss damit der g++ obigen code akzeptiert?
unter anderen Compilern wie zum beispiel MSVC++6 funzt das ganze ohne probleme...danke schonmal
MFG Mr. Gray
-
lass mal das static weg. Wenn du die Funktion nur in einer Übersetzungseinheit haben willst, solltest du lieber einen anonymen-Namespace nutzen (static dafür ist AFAIK eh deprecated, laut ISO Standard)
-
Mr. Gray schrieb:
unter anderen Compilern wie zum beispiel MSVC++6 funzt das ganze ohne probleme...
Kann der VC++ 6 wirklich was anfangen mit __FUNCTION___?
Dein define ist aber nicht so geglückt... Was macht denn der Programmierer, der ein placement-new braucht?
-
was ist ein placement-new?
-
mit einem placement new konstruierst du objekte in schon vorhandenen speicher:
mega_class *moo = new mega_class(blub); //... moo->~mega_class(); //destruieren /*mega_class *foo =*/ new (moo) mega_class(blob); //sozusagen ein einfacher konstruktoraufruf