Löschen QVector<MyObject*> ?

Alles rund um die Programmierung mit Qt
Antworten
huckleberry
Beiträge: 115
Registriert: 2. Oktober 2010 17:07

Löschen QVector<MyObject*> ?

Beitrag 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.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: Löschen QVector<MyObject*> ?

Beitrag 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()
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
huckleberry
Beiträge: 115
Registriert: 2. Oktober 2010 17:07

Re: Löschen QVector<MyObject*> ?

Beitrag 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???
huckleberry
Beiträge: 115
Registriert: 2. Oktober 2010 17:07

Re: Löschen QVector<MyObject*> ?

Beitrag 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?
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: Löschen QVector<MyObject*> ?

Beitrag 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
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
huckleberry
Beiträge: 115
Registriert: 2. Oktober 2010 17:07

Re: Löschen QVector<MyObject*> ?

Beitrag 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
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: Löschen QVector<MyObject*> ?

Beitrag von Christian81 »

da positionAsString(t) und positionAsString(*it) syntaktisch das Gleiche sind glaube ich das nicht -> minimales, kompilierbares Beispiel bitte.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Antworten