new/delete überladen



  • hi,

    ich mache folgendes mit dem g++:

    #include <stdio.h>
    
    inline *operator new(unsigned int nSize, string sFile, int nLine, string sFunction) {
     void *p = (void *)malloc(nSize);
     //...
     return p;
    }
    
    inline operator delete(void *p)
    {
     //...
     free(p);
    }
    
    #define new new(__FILE__, __LINE__, __FUNCTION__)
    
    int main(void)
    {
     int *pBla = new int;
     delete pBla;
     return 0;
    }
    

    mein problem ist jetzt folgendes: mein new-operator wird aufgerufen, und des funzt auch wunderbar... nur mein delete-operator wird irgendwie net aufgerufen... habt ihr vielleicht ne ahnung wieso nicht? ich bin hier voll am verzweifeln *g*

    MFG Mr. Gray



  • Deine C++ Code

    #include <stdio.h> 
    
    inline *operator new(unsigned int nSize, string sFile, int nLine, string sFunction) { 
     void *p = (void *)malloc(nSize); 
     //... 
     return p; 
    } 
    
    inline operator delete(void *p) 
    { 
     //... 
     free(p); 
    } 
    
    #define new new(__FILE__, __LINE__, __FUNCTION__) 
    
    int main(void) 
    { 
     int *pBla = new int; 
     delete pBla; 
     return 0; 
    }
    

    Meinem Vorschlag

    #include <stdio.h> 
    
    inline *operator new(unsigned int nSize, string sFile, int nLine, string sFunction) { 
     void *p = (void *)malloc(nSize); 
     //... 
     return p; 
    } 
    
    inline operator delete(void *p) 
    { 
     //... 
     free(p); 
    } 
    
    #define new new(__FILE__, __LINE__, __FUNCTION__) 
    
    int main(void) 
    { 
     int *pBla = new int; 
     int bla = 0;
    
     &bla = pBla;
    
     delete bla;          // du must den Wert löschen nicht die Adresse !!!
    
      return 0; 
    }
    


  • ich verschieb das mal nach C++

    @StepPilot
    nein, so geht das auf keinen Fall!



  • du musst das inline weg tun.


Anmelden zum Antworten