Zeigerlisten-Klasse
Verfasst: 31. August 2006 20:05
Ich hatte früher meine eigenen Array-Klassen benutzt, seit ich Qt verwende (v4) bevorzuge ich eigentlich seine Listenklassen, zumindest würde ich es gerne. Aber in einem Punkt gefallen die mir überhaupt nicht:
Beispiel: QList<MeineKlasse>. Jedes Element wird als Zeiger gespeichert, warum gibt es dann verdammt nochmal nicht die Möglichkeit existierende Objekte in die Liste zu übernehmen ohne sie zu kopieren. Denn es kommt durchaus vor, dass ich temporäre Teillisten benötige, welche natürlich nur Zeiger auf entsprechend vorhandene Elemente der anderen Liste sein sollten. Und außerdem ist es so nicht möglich, Klassen mit nicht-default-Konstruktoren einzufügen ohne sie erst zu erstellen und dein eine Kopie einzufügen (meine Klassen haben sowieso keine copy constructors).
Wenn ich QList<MeineKlasse*> benutzte wäre das erstens Ressourcenverschwendung (doppelte Zeiger) und zweitens könnte ich nicht QList::clear() aufrufen ohne jedes Element vorher einzeln zu deleten, genauso bei QList::removeLast usw. Desweiteren gibt es kein QList::resize(), was mich stört.
QVector<MeineKlasse*> funktioniert nicht, wahrscheinlich muss ich den Typ dan bei Qt registrieren oder so (mir wird schlecht..). Mein Compiler meldet dann nämlich sowas: "error: aggregate `QVector<MeineKlasse*> meineKlasse' has incomplete type and cannot be defined".
Also was ist nun die optimale Lösung um Zeigerlisten zu verwalten?.
Beispiel: QList<MeineKlasse>. Jedes Element wird als Zeiger gespeichert, warum gibt es dann verdammt nochmal nicht die Möglichkeit existierende Objekte in die Liste zu übernehmen ohne sie zu kopieren. Denn es kommt durchaus vor, dass ich temporäre Teillisten benötige, welche natürlich nur Zeiger auf entsprechend vorhandene Elemente der anderen Liste sein sollten. Und außerdem ist es so nicht möglich, Klassen mit nicht-default-Konstruktoren einzufügen ohne sie erst zu erstellen und dein eine Kopie einzufügen (meine Klassen haben sowieso keine copy constructors).
Wenn ich QList<MeineKlasse*> benutzte wäre das erstens Ressourcenverschwendung (doppelte Zeiger) und zweitens könnte ich nicht QList::clear() aufrufen ohne jedes Element vorher einzeln zu deleten, genauso bei QList::removeLast usw. Desweiteren gibt es kein QList::resize(), was mich stört.
QVector<MeineKlasse*> funktioniert nicht, wahrscheinlich muss ich den Typ dan bei Qt registrieren oder so (mir wird schlecht..). Mein Compiler meldet dann nämlich sowas: "error: aggregate `QVector<MeineKlasse*> meineKlasse' has incomplete type and cannot be defined".
Also was ist nun die optimale Lösung um Zeigerlisten zu verwalten?.