Seite 1 von 1

Allgemeine QList Frage

Verfasst: 5. Juli 2012 13:47
von woody
Hallo,
habe eine kleine Frage zu QList und const references. Angenommen ich habe eine Klasse, die eine QList<QString> list als Member hat.
In der Klasse gibt es eine Methode: fillList();

Code: Alles auswählen

void Class::fillList(){
   QString string1("test");
   QString string2("test2");
   list.append(string1);
   list.append(string2);
}
Laut Qt Doku gebe ich der Methode append einen konstante referenz mit. Hier gebe ich also 2 Referenzen von 2 QStrings mit. Nach der Methode gibt es die 2 Strings nicht mehr, wegen dem Gültigkeitsbereich.
Aber die List hat noch immer die Werte. Das versteh ich nicht ganz....

Re: Allgemeine QList Frage

Verfasst: 5. Juli 2012 14:18
von franzf
Ja, append bekommt eine const Referenz. Ja, der Gültigkeitsbereich der beiden Strings endet am Ende deiner fillList().
Aber QList speichert intern eine KOPIE der übergebenen Objekte (bzw. const ref auf...), weshalb es egal ist, wie lange der Parameter lebt - der könnte noch viel kürzer leben:

Code: Alles auswählen

QStringList lst;
lst.append("Hallo");
Erzeugt einen temporären QString. ACHTUNG: geht nur mit const ref. nonconst-ref erwartet ein nicht-temporäres Objekt. Ist eine Ausnahme im Standard.

Re: Allgemeine QList Frage

Verfasst: 5. Juli 2012 15:05
von woody
Ok, danke für die Antwort,
und was ist in diesem Fall dann der Sinn von der Referenz-Übergabe, wenn sowieso kopiert wird?

Re: Allgemeine QList Frage

Verfasst: 5. Juli 2012 15:18
von franzf
Man spart sich eine Kopie.
Stichworte "Call by Value" und "Call by Reference".

Re: Allgemeine QList Frage

Verfasst: 5. Juli 2012 15:20
von woody
danke, werd ich mir ansehen.