Pointer in containern, spez. Listen

Du bist neu in der Welt von C++? Dann schau hier herein!
Antworten
TrOOPy
Beiträge: 2
Registriert: 9. März 2009 09:52

Pointer in containern, spez. Listen

Beitrag 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.
pfid
Beiträge: 535
Registriert: 22. Februar 2008 16:59

Beitrag 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.
TrOOPy
Beiträge: 2
Registriert: 9. März 2009 09:52

Beitrag 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!
Ubuntu Ibex
Qt 4.4
gcc 4.3.1
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Beitrag 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 ....
Antworten