Iteratoren über Container, die Pointer beinhalten



  • Wie dereferenziere ich die Iteratoren um an die im Container befindlichen pointer zu gelangen und dort delete zu callen?

    std::list<int*> List
    
    	for (auto it = List.begin(); it != List.end(); ++it) {
    		it->  // geht nicht
                    *(it). // geht auch nicht
    	}
    

    stehe gerade irgendwie auf dem Schlauch, da ich es gerne ohne range based for loop machen möchte

    for (auto it : List) {
    		delete it;
    		it = nullptr;
    	}
    


  • delete *it;


  • Mod

    Wenn du Speicher so verwaltest, machst du ohnehin etwas falsch. Du hast rohe Pointer, die aber offensichtlich besitzend sind.

    Mit der Sinnhaftigkeit von std::list fangen wir lieber gar nicht erst an.

    Ehemaliger Java-Programmierer?



  • das habe ich so aus nem Tutorial, wo genau ist das Problem mit den von dir genannten Punkten? Der obige COde ist aus nem Destructor. Zuvor wurde über ne Memberfunction die Liste mit Pushback befüllt


  • Mod

    Sewing schrieb:

    das habe ich so aus nem Tutorial,

    Eine weitere Bestätigung, dass fast alle C++-Tutorials Schrott sind. Ist leider so.

    wo genau ist das Problem mit den von dir genannten Punkten? Der obige COde ist aus nem Destructor.

    Warum zerstört nicht der Zeiger die Ressource, wenn doch der Zeiger der Ressourcenhalter ist? Die Verbindlichkeiten sind hier falsch aufgeteilt, was die Tür zu allerlei Programmierfehlern weit öffnet.



  • tun sie doch?!?! Die loop über den container befreit doch sequentiell alle Ressourcen


  • Mod

    Sewing schrieb:

    tun sie doch?!?!

    Nein? Wem auch immer die Liste gehört zerstört hier die Objekte, die von diesen Zeigern verwaltet werden. Das ist mindestens zwei Schichten weit von der Stelle entfernt, die eigentlich zuständig sein sollte.



  • Was er sagen möchte: smartpointer 😉
    Ints einzeln zu allokiieren ist aber auch fragwürdig.


Log in to reply