Seite 1 von 1

Löschen QVector<MyObject*> ?

Verfasst: 19. Januar 2015 18:21
von huckleberry
Hallo,

ich habe einen Satz an Zeigern, den ich einem Container gespeichert habe. Da Reihenfolge etc. egal war, habe ich einfach QVector genommen.

Die Klasse MyObject ist jeweils etwas komplexer, soll heißen einige Variablen vom Typ QString, double, einige Methoden, etc.

Am Ende (wenn ich das Programm verlasse zB) möchte ich mein QVector durchiterieren, um die einzelnen Zeiger jeweils zu deleten. Ist das mit einem QVector elegant?
Anstatt

Code: Alles auswählen

QVector<MyObject*>
soll ich ein (Zeiger auf ein Zeiger), also

Code: Alles auswählen

MyObject**
nehmen?

Diesen würde ich aber auch durchiterieen müssen oder? Wie sehe der dann aus?

Ich danke schonmal ganz groß und viele Grüße
Huckleberry

*übrigens funktioniert der Codebutton beim editieren/anlegen eines Posts nicht.

Re: Löschen QVector<MyObject*> ?

Verfasst: 19. Januar 2015 18:25
von Christian81
Wenn die Reihenfolge egal ist und es viele insert/delete - Operationen sind dann ist ein Vector eher suboptimal.
Zum Löschen von Pointern im Vector -> qDeleteAll()

Re: Löschen QVector<MyObject*> ?

Verfasst: 20. Januar 2015 08:23
von huckleberry
Christian81 hat geschrieben:Wenn die Reihenfolge egal ist und es viele insert/delete - Operationen sind dann ist ein Vector eher suboptimal.
Zur Zeit sind es maximal ca. 20 Einträge pro MyObject. Davon gibt dann wiederrum zZ 200.000 Stück!
Wenn ein Vector suboptimal wäre, was könnte man dann empfehlen?
Christian81 hat geschrieben:Zum Löschen von Pointern im Vector -> qDeleteAll()
Mein

Code: Alles auswählen

QVector<MyObject*> myVar = ...;
Das myVar hat keine qDeleteAll() Methode???

Re: Löschen QVector<MyObject*> ?

Verfasst: 20. Januar 2015 12:18
von huckleberry
Ok, qDeleteAll() war eine globale Methode, habe ich herausgefunden :)

Hab aber mal eine andere Frage:
Folgendes funktioniert:

Code: Alles auswählen

   QVector<MyObject*>::const_iterator it;
   for(it = c2t_taxis.constBegin(); it != c2t_taxis.constEnd(); ++it)
   {
       MyObject *t = *it;
       ret_String.append("T_(").append(positionAsString(t)).append(") ");
   }
Wenn ich aber mein MyObject direkt in dir Funktion positionAsString übergebe, nicht.

Code: Alles auswählen

   QVector<MyObject*>::const_iterator it;
   for(it = c2t_taxis.constBegin(); it != c2t_taxis.constEnd(); ++it)
   {
       ret_String.append("T_(").append(positionAsString(*it)).append(") ");
   }
Warum?

Re: Löschen QVector<MyObject*> ?

Verfasst: 20. Januar 2015 17:55
von Christian81
Und wie lautet die Fehlermeldung?
Bzgl. vector - einfach mal informieren was für deinen Anwendungsfall am sinnvollsten ist. Wenn es viele insert/delete - Operationen sind und die Reihenfolge unerheblich dann eher ein set

Re: Löschen QVector<MyObject*> ?

Verfasst: 22. Januar 2015 09:57
von huckleberry
Christian81 hat geschrieben:Und wie lautet die Fehlermeldung?
Eine Fehlermeldung gibts keine. Es wird nur ein leerer String ausgegeben. Also:
tp_()
statt
tp_(1.2345;6.7890)
zB

Re: Löschen QVector<MyObject*> ?

Verfasst: 22. Januar 2015 19:06
von Christian81
da positionAsString(t) und positionAsString(*it) syntaktisch das Gleiche sind glaube ich das nicht -> minimales, kompilierbares Beispiel bitte.