std::list löschen?



  • hi,

    bin neu in c++ und wollte mal fragen, ob ich die listen-objekte aus der STL, die ich mit std::list<datentyp> erzeuge, auch selber löschen muss wenn ich sie nicht mehr brauche?

    hab zwar versucht dazu zu googeln, aber nichts gefunden.



  • Du meinst, ob du das Objekt std::list an sich später löschen musst? Die verhält sich so wie jede andere Variable. Wenn du sie auf dem Stack erstellst, wird sie automatisch zerstört und mit ihr auch alle Listenelemente. Da musst du dich also nicht drum kümmern. Anders sähe es aus, wenn du std::list auf dem Heap mit new anlegen würdest. Das macht aber relativ wenig Sinn 😉



  • Man kann sich das eigentlich recht einfach merken. Jeder, der den Operator new braucht muss auch das delete schreiben. Wenn DU nix mit new machst, ist es auch nicht dein Problem das wieder aufzuräumen. Ganz einfach. 😉 (Falls doch, dann ist dijenige Bibliothek falsch designt. ;))



  • oasdf schrieb:

    bin neu in c++ und wollte mal fragen, ob ich die listen-objekte aus der STL, die ich mit std::list<datentyp> erzeuge, auch selber löschen muss wenn ich sie nicht mehr brauche?

    Jede moderne C++ Bibliothek die ich kenne verhält sich so:

    Alle dynamischen Allozierungen die in der Bibliothek erfolgen, werden auch dort wieder freigegeben (siehe auch Vorposter). Alles was du dynamisch allozierst (new) musst auch du wieder sauber freigeben.

    Wenn du selbst Programme schreibst solltest du dich auch an diese Regel halten. Schlechtes Design ist z.B. wenn du eine Funktion schreibst der du einen normalen C++Zeiger übergibst und die Funktion dann den Zeiger mittels new einen Wert zuweist. Falls du doch einmal auf eine Problematik triffst die sich nicht anders lösen lässt, solltest du auf Smartpointer umsteigen (Keinen Zeiger übergeben, Smartpointer zurückliefern), dies ist aber ein Thema das dich direkt am Anfang deines C++ "Lebens" erstmal noch überfordern könnte.

    cu André


Log in to reply