TMemoryStream Memory leak?



  • Hallo,

    bin auf der Suche nach einem Memory - Leak in einer Anwedung.

    Kann jemand bestätigen dass folgendes korrekt ist - oder meinen Fehler in diesem Code aufzeigen?

    TMemoryStream * tms = new  TMemoryStream();
    
    // mach was mit dem stream....
    
    tms->SaveToFile(file);
    delete tms;
    


  • Nein, der Code erzeugt kein Memory Leak. Jedenfalls nicht, wenn SaveToFile keine Exception wift. Grundsätzlich solltest du dir aber angewöhnen, die C++ Smart Pointer ( std::unique_ptr und std::shared_ptr ) zu benutzen. Dabei musst du allerdings etwas aufpassen, die landläufig empfohlene Konstruktion per std::make_shared darfst du bei VCL Klassen nicht benutzen, da sie kein placement new unterstützen und dann UB produzieren (Erklärung siehe hier).

    Also:

    #include <memory>
    
    auto tms = std::make_unique<TMemoryStream>();
    auto->SaveToFile( file );
    


  • Nein, der Code erzeugt kein Memory Leak.

    Vielen Dank, hilft immerhin weiter dass ich woanders suchen muss.


Anmelden zum Antworten