Kann man so operator new überschreiben?



  • Hallo,

    ich habe den globalen operator new so überschrieben:

    void* operator new(size_t size) {
       void* p = malloc(size);
       // logging etc
       return p;
    }
    

    Ist das ok so oder kann das mal Probleme bereiten (bzgl Alignment vielleicht)?
    Die STL Container etc werden dann ja auch dieses new benutzen, oder? Wird die STL dann weiterhin funktionieren?



  • Auf den ersten Blick würde ich sagen, es sollte funktionieren - du mußt nur daran denken, Fehler ala p==NULL abzufangen und auch den operator delete zu überschreiben.

    btw, STL-Container verwenden einen Allokator zum Speicher anfordern, wobei die Standard-Version auch auf new zurückgreifen könnte.



  • CStoll schrieb:

    Auf den ersten Blick würde ich sagen, es sollte funktionieren - du mußt nur daran denken, Fehler ala p==NULL abzufangen und auch den operator delete zu überschreiben.

    Ja, ich habe auch delete überschrieben und rufe da einfach free() auf. bei p == NULL werfe ich ein std::bad_alloc;
    Sollte passen, oder?



  • Weiß das niemand? 😞



  • newer schrieb:

    Weiß das niemand? 😞

    Ja klar geht das (sofern alles korrekt implementiert ist).


Log in to reply