Frage: delete und Makros



  • Hey hey,

    ich habe mal eine kleine Frage und zwar ist es ja moeglich, dass man
    bei einem New-Aufruf mit Hilfe eines Makros noch weitere Informationen hinzufuegen
    kann.

    #define new new(__FILE__,__LINE__)
    

    Und wenn man den new-Operator dann ueberlaedt, dann hat man Zugriff auf diese Informationen:

    void* operator new(size_t requested_size, const char *file, unsigned long line) 
    {	
    	std::cout << file << " ... " << line << std::endl;
    }
    

    Wie geht diese Funktionalitaet mit delete?

    Wenn ich das Makro

    #define delete delete(__FILE__,__LINE__)
    

    definiere und den ueberladenen Operator aufrufe, dann geht das nicht, weil delete einen Pointer erwartet. Gibts dafuer irgendeine Moeglichkeit oder ist
    das ausgeschlossen ?!

    Danke schonmal!
    Mit freundlichen Gruessen
    sevenWaysToLove



  • du handlest dir damit viel ärger ein. wäre bessewr, du würdest delete ohne parameter lassen. brauchst ja auch bei8m debuggen nur zu wissen, welches new schuld ist am speicherloch.



  • Hallo nochmal,

    in wie weit handel ich mir mit dem Überladen mit zusätzlichen Parametern von delete Ärger ein? Der Operator wird doch danach ganz normal aufgerufen oder gibts hier eine Besonderheit bei C++?

    MfG
    sevenWaysToLove



  • sevenWaysToLove schrieb:

    Hallo nochmal,
    in wie weit handel ich mir mit dem Überladen mit zusätzlichen Parametern von delete Ärger ein? Der Operator wird doch danach ganz normal aufgerufen oder gibts hier eine Besonderheit bei C++?
    MfG
    sevenWaysToLove

    du allokierst mit
    Socket* s=new("c:/test/test.cpp",15) Socket;
    dir speicher und übergibst den einer anderen übersetungseinheit. und die löscht ihn mit
    delete s;
    willste wirklich erzwingen, daß jede andere übersetungseinheit deine debug-makros verwendet? wäre besser, du könntest einfach nur new mit oder ohne debug-infos versorgen und delete geht dann einfach so.
    und es ist unnötig, delete-aufrufe mit der zeilennummer zu versorgen. der aufruf hat doch schon nen zeiger auf den zu löschenden speicher bekommen. da kann er gerne nachsehen, zu welchem new das gehört und vermerken, daß dieses new nicht mehr offen ist.


Anmelden zum Antworten