Announcement

Collapse
No announcement yet.

Instanzen einer Klasse auf Vorhandensein abfragen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Instanzen einer Klasse auf Vorhandensein abfragen

    Ich erzeuge mehrere 1000 Instanzen einer Klasse. Im Programmverlauf werden einige davon wieder gelöscht.
    Meine Hauptroutine soll nun alle noch vorhandenen Instanzen bearbeiten. ?
    Wie kann ich prüfen ob eine Instanz überhaupt noch vorhanden ist oder bereits gelöscht wurde.

    und weiterführend wie kann ich automatisch erzeugte neue Instanzen dann am besten an stelle der vorher gelöschten erzeugen, so dass z.B. nicht mehr als 2000 Instanzen einer Klasse vorhanden sind. Dazu muss man sozusagen rausfinden wo im Array der Instanzen eine Lücke ist.

  • #2
    Dann nusst du alle Instanzen in einer Liste halten und dort nachschauen

    Wie will deine Hauptroutine alle bearbeiten, wenn du sie nicht schon irgendwo erfasst hast??
    Zuletzt editiert von Christian Marquardt; 17.09.2010, 22:07. Reason: Rechtschreibung
    Christian

    Comment


    • #3
      ich habe bisher ein variable die die Anzahl an Instanzenenthält.
      So z.B. 3 Instanzen. d.h. Instanz [0-2] wird abgefragt
      was mache ich aber jetzt wenn Instanz 1 gelöscht wird. Dann soll ja nur noch 0 und 2 Abgefragt werden.
      Muss ich mir dann in nem extra array merken welche Instanze noch vorhanden ist?

      Comment


      • #4
        Ich kann das nur wiederholen: Halte deine Instanze in einer TList. Diese ist Grundlage für die Bearbeitung und wird durchlaufen, wenn irgendwas mit den Klassen gemacht werden muss. Genau wie eine neue Instanz in die Liste aufgenommen wird, muss eine Instanz BEIM LÖSCHEN aus dieser Liste entfernt werden
        Zuletzt editiert von Christian Marquardt; 27.03.2016, 18:19.
        Christian

        Comment


        • #5
          Sind denn die generischen Liste aus list.h nicht zu empfehlen?

          Comment


          • #6
            Originally posted by Christian Marquardt View Post
            Halte deine Instanze in einer TList.
            Ah kapiert, mein Hänger war ich wollte immer nur den Index der Instanz speichern, wenn ich dich richtig verstanden haben speichere ich so aber den ganzen NAmen der Instanz und suche dann beim sterben die TList nach dem Namen und nehme den raus. Entsteht beim Löschen eine Lücke in der Liste?
            d.h. gibt mir der TList counter nach dem Löschen eines mittleren Items eine kleinere Zahl aus als davor?

            Comment


            • #7
              Die TList speichert das Objekt selbst, bzw. den Zeiger dazu

              Siehe Beschreibung

              Beschreibung Mit einem TList-Objekt, das ein Array mit Zeigern speichert, wird oft eine Liste von Objekten verwaltet. TList führt verschiedene Eigenschaften und Methoden ein, die folgenden Zwecken dienen: Objekte zur Liste hinzufügen oder daraus entfernen. Objekte in der Liste neu anordnen. Objekte in der Liste finden und darauf zugreifen. Objekte in der Liste sortieren.

              Wenn du mit Add oder Delete Objekt aus der Liste entfernst, "weiss" die Liste wieviele noch da sind. Ob da Lücken sind bzw. wie die Liste das intern macht kann dir egal sein. Du gehst die Liste von 0 bis Count durch

              Diese Liste ersetzt dein "Array von Instanzen"

              Schau mal in die Hilfe zu TList
              Christian

              Comment


              • #8
                ok super danke

                Comment


                • #9
                  Gibts denn keine streng typisierten Listen?

                  Comment


                  • #10
                    Nein, jibbet nich...jedenfalls nicht bis zur 2006er Version, ob die neueren das haben weiss ich nicht
                    Christian

                    Comment


                    • #11
                      Also wir haben C++-Builder 6, der ist garantiert älter als 2006 Letztens bin ich dort auch über die list<T> templates gestolpert. Sind in list.h definiert. Die sind allerdings typisiert und haben bei mir auch ganz gut funktioniert. Alllerdings wird die for Schleife zum iterieren über die Liste doch etwas länglich, aber zumindest gibts sowas wie typisierte Listen.

                      TList finde ich auch irgendwie unhandlich. Muss man ständig in Kommentaren beschreiben was denn jetzt in der Liste eigentlich drin ist. Aber natürlich immer noch besser als irgendwelche ominösen Arrays

                      Comment


                      • #12
                        Ja, die list gehört zu STL

                        http://www.sgi.com/tech/stl/table_of_contents.html

                        diese kann typisiert werden.
                        Christian

                        Comment


                        • #13
                          Ist zwar an manchen Stellen etwas seltsam zu verwenden, aber trotzdem wohl nicht die beste Lösung für obiges Problem.

                          Comment


                          • #14
                            Nunja, der Umgang mit einem Iterator ist für Anfänger vielleicht nicht einfach.....
                            Christian

                            Comment


                            • #15
                              Naja aber der große Vorteil ist, dass man keine bösen IndexOutOfBounds Exceptions mehr bekommt. In C++ ists ja noch schlimmer, weil man nicht mal ne schöne Exception bekommt, sondern nur eine Speicherzugriffsexception. Aber gut, sehen schon etwas wild aus und würd ich vielleicht nicht gerade jedem Anfänger zumuten

                              Comment

                              Working...
                              X