[erledigt]erst zweites Objekt in boost::ptr_list funktioniert
-
Weshalb funktioniert hier erst das 2. Element und die folgenden?
#include <list> #include <ptr_list> using namespace boost; using namespace std; class A { public: A(){}; void foo(); }; class B : public A { public: B(){}; } int main() { list<B> Bs; ptr_list<A> pAs; B Erstes = A(); B Zweites = A(); As.push_back(Erstes); pAs.push_back(&As.back); As.push_back(Zweites); pAs.push_back(&As.back); //... return 0; }
-
halo schrieb:
Weshalb funktioniert hier erst das 2. Element und die folgenden?
Würdest du "funktioniert" mal genauer definieren?
Zumal <boost/ptr_list.hpp> sich soviel ich weiß um Speicherverwaltung kümmert, und Stackobjekte hier komplett fehl am Platze sind (Ein delete auf einen Speicherbereich der nie mit new alloziert wurde ist jedenfalls mehr als problematisch).
-
Zumal <boost/ptr_list.hpp> sich soviel ich weiß um Speicherverwaltung kümmert
hmm ok, ich hab jetzt im Code oben noch etwas geändert, aber wenn sich boost::ptr_list um die Speicherverwaltung kümmert, dann bringts mir nicht wirklich viel.
Also die Funktion foo vom 1. Objekt wird nicht aufgerufen.
Ich werde es jetzt einmal mit list<A*> versuchen.
-
und es funktioniert, scheint irgendwas mit boost::ptr_list zu tun gehabt zu haben.
-
halo schrieb:
Zumal <boost/ptr_list.hpp> sich soviel ich weiß um Speicherverwaltung kümmert
hmm ok, ich hab jetzt im Code oben noch etwas geändert, aber wenn sich boost::ptr_list um die Speicherverwaltung kümmert, dann bringts mir nicht wirklich viel.
Also die Funktion foo vom 1. Objekt wird nicht aufgerufen.
Ich werde es jetzt einmal mit list<A*> versuchen.
Was glaubst du, warum es ptr_list heißt? Weil es nur für Pointer ist. Sonst kannst du auch std::list nehmen.
Der Vorteil von ptr_list ist, dass im Destruktor auch gleich delete auf alle enthaltenen Elemente aufgerufen wird.
-
halo schrieb:
Zumal <boost/ptr_list.hpp> sich soviel ich weiß um Speicherverwaltung kümmert
hmm ok, ich hab jetzt im Code oben noch etwas geändert, aber wenn sich boost::ptr_list um die Speicherverwaltung kümmert, dann bringts mir nicht wirklich viel.
Wenn keine Speicherverwaltung gewünscht wird, sind die Standardcontainer die bessere Wahl. Aber davon abgesehen, enthält der uns gezeigte Code auch...
halo schrieb:
Also die Funktion foo vom 1. Objekt wird nicht aufgerufen.
...keinen Aufruf der Methode foo.
-
asc schrieb:
...keinen Aufruf der Methode foo.
ja stimmt den hab ich vergessen, aber ich hab ja
//...das hier geschrieben
