Allgemeine QList Frage

Du bist neu in der Welt von C++? Dann schau hier herein!
Antworten
woody
Beiträge: 85
Registriert: 1. April 2011 21:13

Allgemeine QList Frage

Beitrag 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....
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: Allgemeine QList Frage

Beitrag 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.
woody
Beiträge: 85
Registriert: 1. April 2011 21:13

Re: Allgemeine QList Frage

Beitrag 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?
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: Allgemeine QList Frage

Beitrag von franzf »

Man spart sich eine Kopie.
Stichworte "Call by Value" und "Call by Reference".
woody
Beiträge: 85
Registriert: 1. April 2011 21:13

Re: Allgemeine QList Frage

Beitrag von woody »

danke, werd ich mir ansehen.
Antworten