QList<int>* per Zeiger ?

Du bist neu in der Welt von C++? Dann schau hier herein!
Antworten
lespaul
Beiträge: 87
Registriert: 11. August 2011 10:07

QList<int>* per Zeiger ?

Beitrag von lespaul »

Hallo,

ich habe drei Zeiger auf ein QListobjekt mit int Werten

Code: Alles auswählen

QList<int>* gesamtListe = new QList<int>;
//.. 
//.. hier wird die gesamtListe mit irgendwlechen Werten gefüllt
//..
QList<int>* roteElemente = NULL;
QList<int>* blaueElemente = NULL;
Meine gesamtListe ist bereits gefüllt, wobei roteElemente und blaueElemente noch nicht initialisiert sind und auf 0 zeigen.

Ich habe nun eine Methode, wleche meine gesamtListe in rot und blau sortiert. Die oben erstellten Zeiger würde ich dann gerne hier füllen, also die Objekte werden auch in der Methode mit new erzeugt usw.:

Code: Alles auswählen

void sortiereListe(QList<int>* in_gesamtL , QList<int>* in_roteL , QList<int>* in_blaueL )
{
QList<int>* in_roteL = new QList<int>;
QList<int>* in_blaueL = new QList<int>;

for (;;){
//.. bla selektiere
in_roteL->append(red_value_from_in_gesamtL);
in_blaueL->append(blua_value_from_in_gesamtL);
}
}
Also ich gebe in der Methode nichts zurück. Da ich die Zeiger ausserhalb der Funktion erstellt habe, sollte es ja auch nach den Methode dahinzeigen?
Wenn ich nun
sortiereListe(gesamtListe , roteElemente, blaueElemente )
aufrufe sind die letzteren leer?

Grus Lespaul
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: QList<int>* per Zeiger ?

Beitrag von franzf »

Sorry, aber das ganze HEAP-gebastel ist ein Krampf :/
QList einfach in den automatischen Speicher ("Stack") legen. Listen als (nicht-const) Referenz übergeben und modifizieren.
Dein Code verletzt nämlich leider auch noch die Regel, dass Erzeugung und Zerstörung beim selben Verantwortlichen liegen sollte. (Gut, bei den QObject-Hierarchien ist das was anderes, aber hier hast du Daten, da sollte klar sein wem die gehören.) Wahrscheinlich erzeugst du sogar ein nettes MemoryLeak :P

Ich würde das so machen:

Code: Alles auswählen

QList<int> gesamteListe;
// die beiden anderen werden hier noch gar nicht deklariert, erst direkt bevor sie gebraucht werden

void sortiereListe(QList<int> const& in_gesamtL , QList<int>& in_roteL , QList<int>& in_blaueL )
{
  for (;;){
    //.. bla selektiere
    in_roteL.append(red_value_from_in_gesamtL);
    in_blaueL.append(blua_value_from_in_gesamtL);
}
}

// Benutzung:
QList<int> rote;
QList<int> blaue;
sortiereListe(gesamteListe, rote, blaue);
lespaul
Beiträge: 87
Registriert: 11. August 2011 10:07

Re: QList<int>* per Zeiger ?

Beitrag von lespaul »

Vielen Dank für dei Antwort. Kannst du was zum & erklären?
Es wird also als Referenz übergeben?
bezieht sich das const auf das QList oder auf die Elemente?

Thnx! Lespaul
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: QList<int>* per Zeiger ?

Beitrag von franzf »

lespaul hat geschrieben:Kannst du was zum & erklären?
Es wird also als Referenz übergeben?
Genau. Einfach in deinem C++-Buch "Referenzen" nachschlagen.
bezieht sich das const auf das QList oder auf die Elemente?
Es bezieht sich auf das übergebene Objekt, wodurch aber natürlich auch die Member betroffen sind: Nur const-Methoden können aufgerufen werden, public Member können nicht modifiziert werden.
QList<int> const& value
Lies: "value ist eine Referenz auf ein Objekt vom Typ QList<int> const".
(Type const ist gleichbedeutend zu const Type. Da aber nur hier das const auch VOR dem Bezeichner stehen kann, nehm ich lieber die konsistente Schreibweise:
Memberfunktionen:
void doIt() const;
Zeiger:
int *const (konstanter Zeiger auf int)
int const* const (konstanter Zeiger auf const int)
nur hier ginge auch const int*const, was mMn. doof ist)
Aber auch hier -> Buch Thema "Modifizierer const" o.Ä.
lespaul
Beiträge: 87
Registriert: 11. August 2011 10:07

Re: QList<int>* per Zeiger ?

Beitrag von lespaul »

Danke, funzt ;)
Antworten