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
    

Anmelden zum Antworten