Einmaliger hat geschrieben:Ich will ja nicht kleinlich sein, aber besser wäre: ...
Hi, ok, das const in beiden Memberfunktionen ist in der Tat besser, beim 'set' sollte niemals der übergebene QString manipuliert werden dürfen, beim 'get' niemals der eigene, der zurück gegeben wird.
Dass du Referenzen verwendest, möchte ich mal eben (mir selbst) erklären (bin noch in der Lernphase

öhm, ist man da jemals raus ?).
Ich gehe erstmal davon aus, dass ich keine Referenz verwende, also wird beim Funktionsaufruf durch die Parameterübergabe der QString kopiert in den Speicher, den die aufgerufene Funktion auf dem Stack reserviert bekommt. (Streng genommen liegt nur die Verwaltung von QString auf dem Stack, der (in der Regel unbekannt große) Datenbereich liegt auf dem Heap, wie üblich bei komplexen Datentypen.)
So, durch das bei Qt verwendete "copy on write" oder auch "implicite sharing" Model wird durch die Zuweisung 'this->name = name;' nur dafür gesorgt, dass beide Variablen const name und name auf denselben Speicherbereich zeigen. Außerdem wird der ReferenzCounter für den Datenbereich um 1 erhöht (und beim Verlassen der Funktion wieder um 1 dekrementiert, da const name gelöscht wird). Insgesamt gibt es aber den Speicherbereich für den QString name zweimal, einmal für dort, von wo aus die Funktion setName aufgerufen wird und einmal für das Objekt karteikarte. Wenn man nun stattdessen nur eine Referenz verwendet, also &name, dann gibt es den Speicher, der den QString abbildet nur einmal, denn im Objekt Karteikarte würde name auch nur den gleichen Speicherbereich verwenden, wie der ursprüngliche QString, der dort verwendet wird, wo setName aufgerufen wird.
Hab ich das richtig verstanden ?