Seite 1 von 1

Pointer in containern, spez. Listen

Verfasst: 9. März 2009 14:45
von TrOOPy
Ich versuche in einem Container vom Typen QList Pointer auf Waypoints abzulegen:

Code: Alles auswählen

class Waypoint : public QPoint
{
	private:
	Waypoint(QPoint& pos): QPoint(pos)
	{
	}
	std::list / QList <Waypoint*> _adjacentWps;
};
klappt auch ganz gut, nur verhält sich die Sache eigenartig. Wenn ich z.B. die Position
(x,y) eines Wegpunktes ändere funktioniert das gut. Wenn ich einige geänderte Wegpunkte dann über die adjazenzliste _adjacentWps anspreche, sind da aber noch die alten Werte drinn, die die Punkte ursprünglich hatten. :shock:


Folgende allgemeine Frage:
Was sieht Qt oder c++ wenn ich eine Liste von Pointern definiere? Wird die Liste wie
eine Liste von Integern(also 32bit uint Speicherstellen) verwaltet, oder wird hier über das Template
festgestellt "oha! ein Pointer typ" und irgendwas anders behandelt? Z.B. unter irgendwelchen Umständen eine Kopie von einem Wegpunkt angelegt und dann der Pointer darauf zurückgegeben.

Verfasst: 9. März 2009 14:51
von pfid
Irgendwie ist das ein bisschen wenig Code für das Problem (ich verstehs nicht). Keiner kann sagen, was du mit der Liste machst. Und wieso hat ein Wegpunkt (=jeder Wegpunkt) eine Liste mit Wegpunkten? Sollte nicht ein anderes Objekt (Klasse) die Liste mit Wegpunkten haben?

[edit] Wenn du eine Liste mit Pointern anlegst, werden die Pointer gespeichert. Es wird keine Kopie des Objektes o.ä. erzeugt. Das Template erspart dir in diesem Fall erstmal das Casten, ansonsten könntest du auch eine "dumme" generische Liste mit Voidpointern nutzen.

Verfasst: 9. März 2009 22:51
von TrOOPy
Zur Erklärung der Pointerliste:
Ein Wegpunkt hat von ihm aus erreichbare ("benachbarte") Wegpunkte, zu denen
er Pointer hält..
Die Wegpunkte mit Ihren Verbindungen untereinander ergeben
so eine Art Straßennetz.

Ansonsten wollte ich hauptsächlich wissen, ob Qt mir hier irgendwo dazwischen
funkt.
wenn also qt nicht weiter zwischen Pointer und uint unterscheidet, ausser
dass ich mir den cast spare, ..... bin ich selber der arsch :?

Ok :roll: *debugger anwerf* ... Seufz!

Verfasst: 10. März 2009 10:28
von RHBaum
Schau in den Source - Code ...^^

Aber ich bin mir fast sicher, das die QT keine uberladung fuer nen pointertyp macht, warum auch ?

ein zeiger, typisiert oder nicht, hat alles was sich die listen wuenschen.
Zuweisung, sowas wie nen CopyConstruktor, soger nen lesser, falss man assiozative container verwendet. Ob das das ist, was der user will iss ne andere frage.

Was erwartest du den eigentlich ? das die liste wenn sie kopiert wird, eine tiefe Kopie der zeiger macht ???
wenn also qt nicht weiter zwischen Pointer und uint unterscheidet
Ja, sie verhaelt sich aehnlich wie mit nem uint !

Bei deinem Design laeufts mir scho irgendwie den ruecken kalt runter ^^
aber siehe pfid's Kommentar ....

Ciao ....