Multidimensionale Menüstruktur mit OOP und stl::vector



  • Worin ich ein potentielles Problem sehe, ist die rekursive Löschung der erzeugten Objekte in Hinblick auf mögliche Speicherlecks, weil hierbei (sofern ich die Methodik richtig verstanden habe) nicht von oben nach unten verfahren werden kann, denn wenn ein Objekt gelöscht wurde, komme ich doch an den Speicherplatz, den die Unterobjekte belegen, gar nicht mehr heran. Von daher vielleicht doch lieber std::unique_ptr oder boost?



  • c+dummie schrieb:

    denn wenn ein Objekt gelöscht wurde, komme ich doch an den Speicherplatz, den die Unterobjekte belegen, gar nicht mehr heran.

    Das ist doch der Witz bei rekursivem Löschen: du rufst rekursiv zuerst die Löschmethoden/delete für die UNterobjekte auf, danach fürs Oberobjekt.

    Trotzdem ist unique_ptr auf jeden Fall eine gute Idee.



  • Ich verwende hier while weil ein for ziemlich messy aussieht. Und es schwer ist auf den ersten Blick zu erkennen was Sache ist. Meistens ziehe ich i und begin auch noch jeweils in eigene Zeilen.

    Ein

    std::vector<MenuItem*>::const_iterator i=items.begin();
    std::vector<MenuItem*>::const_iterator end=items.end();
    while(i!=end) {
      ...
    }
    

    finde ich viel viel viel besser als ein

    for(std::vector<MenuItem*>::const_iterator i=items.begin(), end=items.end();i!=end; ++i) {
      ...
    }
    

    uU koennte man natuerlich besser umbrechen um die gleiche lesbarkeit zu erreichen. Aber prinzipiell will ich beim lesen des Codes "i!=end" sehen. Das ist der springende Punkt. Mit auto gehts natuerlich dann schoener...

    zum loeschen: ich habe ja geschrieben dass ich hier boost::ptr_vector bevorzugen wuerde - aber ich wollte boost nicht verlangen fuer den Code. vector<smart_ptr> gefaellt mir vom Prinzip her garnicht - das vermeide ich. Fuer sowas gibts naemlich boost::ptr_container.

    Warum das ganze:
    Weil man immer verhalten haben will. Welchen Vorteil haette das ganze gegenueber einem vector<string> wenn MenuItem keine Funktionalitaet bietet? Normalerweise will man ja Menupunkte auch auswaehlen koennen und die sollen dann etwas tun. Nur anzeigen ohne dass ich eine Aktion darauf setzen kann ist etwas schwach 😉

    Und diese Aktion eben. zB neues Fenster oeffnen oder gewisse Daten anzuzeigen muss mit dem Menupunkt irgendwie verknuepft werden.

    PS:
    ich habe den Code in 2 Minuten oder so geschrieben - da steckt nicht uebermaessig viel Nachdenken drinnen... Es soll nur grob skizzieren wie es aussehen koennte/sollte.


Anmelden zum Antworten