Copy and Move assignment operator für TreeItem

Du bist neu in der Welt von C++? Dann schau hier herein!
Antworten
ralfwickum
Beiträge: 20
Registriert: 25. August 2015 13:29

Copy and Move assignment operator für TreeItem

Beitrag von ralfwickum »

Hallo,

ich habe folgendes Beispiel zur Übung nachimplemetiert: http://doc.qt.io/qt-5/qtwidgets-itemvie ... ample.html

Da http://doc.qt.io/qt-5/qtwidgets-itemvie ... m-cpp.html und http://doc.qt.io/qt-5/qtwidgets-itemvie ... tem-h.html nicht Rule-Of-Five konform sind, möchte ich zur Übung diese dort einbauen.

Vorab: Klasse TreeItem hat folgende Memebervariablen:

Code: Alles auswählen

    QList<TreeItem*> childItems;
    QVector<QVariant> itemData;
    TreeItem *parentItem;
1. Da dort nur die Memebervariable parentItem ein Pointer ist, bringen mir die Vorteile der Move Semantics auch nur dort etwas?
2. QVector<QVariant> itemData ist weder ein Pointer, noch beinhaltet es Pointer, dort habei ch überhaupt keine Vorteile, richtig?
3. QList<TreeItem*> childItems ist selbst zwar auch kein Pointer, aber die Containerelemente sind Pointer. Hätte ich dort Nutzen durch Move Semantics?
4. Wenn ich mit 3. und 4. richtig liege, kann ich Move Semantics ausschöfpen wenn ich alle Membervariablen in Pointer umwandle?

Code: Alles auswählen

    QList<TreeItem*> * childItems;
    QVector<QVariant> * itemData;
    TreeItem *parentItem;
Danke schonmal für alle Aufklärenden und Konstruktiven Hinweisgebern.
VG Ralf
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: Copy and Move assignment operator für TreeItem

Beitrag von Christian81 »

Die C++11 - Move-Semantik (in einem Objekt) nützt Dir bei Pointern auf Objekte gar nichts da ja keine Daten sondern nur die Pointer auf die Daten kopiert/verschoben werden. Maximal beim kopieren einer Objektliste (in einem Container wie Q/std::vector) hilft Dir ggf. die Move-Semantik ein memcpy() der Pointer zu vermeiden.
Und da das TreeItem eigentlich immer als Pointer zu verwenden ist (schon allein um eine sinnvolle Parent - Child -Beziehung aufbauen zu können) ist hier der Move ctor etc. absolut irrelevant.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Re: Copy and Move assignment operator für TreeItem

Beitrag von RHBaum »

Generell, "Rule-Of-Five" und ähnliche Regeln, betreffen meistens "ideale" Objekte.
Ideal aus C++ Sicht, was meist bedeutet ... frei von Abhängigkeiten und Nebenwirkungen.

Das sind Objekte mit Parent Child beziehungen etc eben nicht.
z.b. der CCTor Class::class(const class & rx);
Bei einem Item in einem Baum, was erwartest du dann vom Verhalten dieses CCtors ?
Ist der wirklich nebenwirkungsfrei ...
Macht er auch wirklich Sinn ?
Was nützt dir nen CTor, wo du hinterher noch nacharbeiten musst, bzw. sogar noch andere betroffene Objekte ändern musst ?
Ähnlich siehts mit der Anwendbarkeit der "rules of Three" bzw five auch aus.

BTW: nicht umsonst heissts immer das grad GUI Frameworks "mieses" C++ Design haben.
ein Grund ist halt, das die meisten GUI Objecte ne Beziehung zu ner HW Ressource haben, die wiederum mit anderen Ressourcen in Verbindung stehen.
Somit GUI Objekte kaum "ideale" C++ Objekte abgeben .....

Ciao ....
Antworten