std::vector frage
-
hallo wenn ich einen
vector <selbsterstellte_klasse*>
habe, kann ich mit dem auch gleich neue elemente anlegen?
sowas in der art vector.push_back(new selberstellt) ?
__________________________________________________________________
kennt einer eine gute (falls möglich sogar deutschsprachige) seite
auf der die containerklassen, vielleicht sogar die boost-klassen
erklärt werden, (auch für anfänger geeignet?)
-
zu 1. japp, das kannst du - warum haste es nicht einfach mal ausprobiert?
was spricht gegenstd::vector <deine_klasse_also_kein_pointer>;?zu 2.
http://cppreference.com/
ist englisch und nicht vollständig und beschäftigt sich "nur" mit der STL - aber sollte reichen... ich finds auf jeden fall recht nützlich ^^bb
-
gegen kein pointer spricht dass ich slicing vermeiden will da mein vector verschiedene klassen, welche von einer abgeleitet sind, enthalten soll

aber danke
-
np ^^
aber slicing hat jz nicht so viel mit polymorphie zu tun!?
du meintest vermutlich das umkopieren der objekt-instanzen?!bb

-
unskilled schrieb:
aber slicing hat jz nicht so viel mit polymorphie zu tun!?
Nö, er meint schon Slicing. Der Vektor ist ja für die Basisklasse parametrisiert, es werden aber abgeleitete Objekte reingepackt. Wenn Du das per Wert statt per Zeiger machst, dann wird der Unterklassen-Teil weggeschnippelt.
-
Konrad Rudolph schrieb:
unskilled schrieb:
aber slicing hat jz nicht so viel mit polymorphie zu tun!?
Nö, er meint schon Slicing. Der Vektor ist ja für die Basisklasse parametrisiert, es werden aber abgeleitete Objekte reingepackt. Wenn Du das per Wert statt per Zeiger machst, dann wird der Unterklassen-Teil weggeschnippelt.
Wieder was dazu gelernt - wusste nicht, dass das mit unter Slicing zählt ^^
bb
-
ravenheart schrieb:
hallo wenn ich einen
vector<selbsterstellte_klasse*>habe, kann ich mit dem auch gleich neue elemente anlegen? Sowas in der artvector.push_back(new selberstellt)?Naja, was spricht denn dagegen, dass du es so erledigst?
std::vector<MyClass*> vec; vec.push_back(new MyDerivedClass); vec.push_back(new MyDerivedClass); // usw.Du musst einfach nicht vergessen, den Speicher freizugeben. Geht mit Boost übrigens ganz einfach.
#include <boost/bind.hpp> #include <boost/checked_delete.hpp> #include <algorithm> // ... std::for_each(vec.begin(), vec.end(), boost::bind(boost::checked_deleter<MyClass>(), _1));Oder aber du verwendest gleich die ptr_container von Boost. Diese übernehmen das löschen für dich.
ravenheart schrieb:
kennt einer eine gute (falls möglich sogar deutschsprachige) seite auf der die containerklassen, vielleicht sogar die boost-klassen erklärt werden, (auch für anfänger geeignet?)
Die beste C++ Dokumentation, welche ich kenne, finde man hier:
http://www.cpluslus.com/reference/Für Boost geht man am besten auf die Dokumentationsseite von Boost:
http://www.boost.org/libs/libraries.htmUm das Englisch wirst du beim Programmieren leider nicht herumkommen. Daher möglichst früh lernen, diese Texte zu lesen und zu verstehen.
Grüssli