std::list Wie vom Iterator zum Objekt?
-
Hallo Forum,
wie komme ich vom Iterator der Liste wieder zu dem ursprünglichem Objekt?
// Ich fülle die Objekte so in die Liste ein: std::list<MyClass> liste; MyClass *oMyClassObj = new MyClass(); liste.push_back(*oMyClassObj); //Wie komm ich nun wieder zum Objekt? for (std::list<MyClass >::const_iterator oIter = liste.begin(); oIter != liste.end(); oIter++) { oIter->ShowMessagebox(); // Funktioniert. const MyClass *abc = oIter; // Geht nicht! }cannot convert from 'class std::list<class MyClass ,class std::allocator<class MyClass > >::const_iterator' to 'class MyClass *'
-
ZubX schrieb:
Hallo Forum,
wie komme ich vom Iterator der Liste wieder zu dem ursprünglichem Objekt?
// Ich fülle die Objekte so in die Liste ein: std::list<MyClass> liste; MyClass *oMyClassObj = new MyClass(); liste.push_back(*oMyClassObj);Ich hoffe, du löscht oMyClassObj (ist das ein Ritual?
Oh-Du-Mein-Klassen-Objekt... j/k) danach auch wieder.//Wie komm ich nun wieder zum Objekt? for (std::list<MyClass >::const_iterator oIter = liste.begin(); oIter != liste.end(); oIter++) { oIter->ShowMessagebox(); // Funktioniert. const MyClass *abc = oIter; // Geht nicht! }it ist der Iterator.
*it ist ein lvalue, dass auf das Objekt verweist
&*it ist demzufolge ein Zeiger, der auf das Objekt zeigt.
-
(erledigt)
-
*oIter
Aber das hier:
// Ich fülle die Objekte so in die Liste ein: std::list<MyClass> liste; // ok MyClass *oMyClassObj = new MyClass(); // ne liste.push_back(*oMyClassObj); // ne // ENTWEDER: MyClass hat einen guten Copy-Constructor: std::list<MyClass> liste; MyClass my_obj = MyClass(); liste.push_back(my_obj); (in dem fall: *iter) // ODER: MyClass als Pointer verwenden sd::list<MyClass*> ptrliste; MyClass* my_obj = new MyClass(); liste.push_back(my_obj); (in dem fall: *(*iter))MfG SideWinder
-
Oder:
boost::ptr_list<MyClass> liste; MyClass *obj = new MyClass; liste.push_back(obj); //oder std::list<boost::shared_ptr<MyClass> > liste; MyClass *obj = new MyClass; liste.push_back(obj);
-
Vielen Dank

Das war ja nur ein Beispiel um den Sachverhalt zu verdeutlichen. Wie das mit delte läuft weiß ich natürlich...@Sidewinder: Was meinst Du mit gutem CopyContruktor? Soweit ich weiß fügt der Kompiler einen ein wenn ich keinen definiert habe. Dieser CC kopiert dann alle privaten Variablen. Was könnte da schief gehen?
-
Falls du innerhalb der Klasse dynamischen Speicher anforderst, musst du den innerhalb des Copy-Constructors kopieren. Da das neue Objekt neuen dynamischen Speicher benötigt.
Das du solchen Speicher innerhalb von MyClass benutzt habe ich gedacht, weil du auch MyClass dynamisch am Heap anlegen willst was eher bei großen Objekten der Fall ist, und große Objekte haben meistens auch viel dynamischen Speicher. allokiert.
MfG SideWinder
-
Darüber habe ich noch nicht nachgedacht. MyClass hat in der Tat Heap Speicher. Das wäre mir später wenn das Objekt aus der Liste kommt auf die Füße gefallen...
Vielen Dank
