multidim stl vector memory leak



  • FrEEzE2046 schrieb:

    Ich hatte das jetzt so verstanden, dass vector<> generell seinen Speicher nicht freigeben würde. Ich denke mal, dass ich das hier falsch verstanden habe.

    Doch, std::vector gibt sämtlichen allokierten Speicher am Ende seiner Lebenszeit wieder frei. Fallstricke wie Zeiger auf dynamisch erzeugte Objekte, deren Adressen in std::vector verwaltet werden gibt es natürlich, aber solange man "vollständige" Objekte im Vektor ablegt treten keine memory leaks auf.



  • FrEEzE2046 schrieb:

    pumuckl schrieb:

    Das hilft IIRC auch nicht, sondern leert auch nur v. Der behält seinen Speicher trotzdem bein. Wirklich gelöscht wirds durch swap:

    std::vector<int> v;
    // fülle v
    v.swap(std::vector<int>())
    

    Das war mir auch noch nicht bekannt. Gibt vector den allokierten Speicher nicht im Destruktor wieder frei?

    Doch, und zwar nur im Destruktor. Im gezeigten Code wird aber nur der temporäre leere vector zerstört, der vector v behält seinen Speicher. Der op= von std::vector arbeitet wohlgemerkt nicht mit copy&swap - das liegt an der "don't pay for what you don't use"-Philosophie von C++, die verbietet, für einen exceptionsicheren op= einen temporären vector von potentiell mehreren MB Größe anzulegen.


Anmelden zum Antworten