vector mit basisklassen in einen mit abgeleiteten klassen casten?
-
@Tyrdal Wir leben nicht mehr in den 90ern. Kopier' mal so einen Vector ...
-
@Tyrdal sagte in vector mit basisklassen in einen mit abgeleiteten klassen casten?:
Das ist natürlich völliger Quark. Man muss dann natürlich selber auf das Löschen dieser Zeiger achten, aber sonst ist da nix wildes bei. In C++98 ging es oftmals gar nicht anders.
Mit C++98 gab es bereits boost::shared_ptr (seit 1.23.0 dabei d.h. 2001), die man problemlos in Container ablegen konnte. auto_ptr war ja defekt und somit nicht wirklich benutzbar. Normale Zeiger legte man deshalb besser nicht in Containerklassen ab, weil RAII damit nun einmal nicht funktioniert und das seit C++98 eigentlich der Standard war. Wenn man das damals brauchte musste man sich halt eine eigene Wrapperklasse um den Zeiger herum bauen, weil es außer boost::shared_ptr nicht wirklich etwas Vorgefertigtes gab und unique_ptr war auf Grund der fehlenden move Unterstützung technisch nicht möglich.
Und bitte daran denken, wir reden hier über einen Anfänger, d.h. jemanden der nicht wirklich weiß wie man mit rohen Zeiger umgehen muss. Sein Code räumt die Zeiger jedenfalls nicht sauber ab.
-
@john-0 sagte in vector mit basisklassen in einen mit abgeleiteten klassen casten?:
Und bitte daran denken, wir reden hier über einen Anfänger, d.h. jemanden der nicht wirklich weiß wie man mit rohen Zeiger umgehen muss.
CppCon 2017: Bjarne Stroustrup “Learning and Teaching Modern C++” (7:15) Transkript: "...instead of stifling yet another innocent novice"
-
@Swordfish sagte in vector mit basisklassen in einen mit abgeleiteten klassen casten?:
@Tyrdal Wir leben nicht mehr in den 90ern. Kopier' mal so einen Vector ...
Manche tun das compiler technisch leider schon noch. Und so einen vector zu kopieren ist ja nun kein Problem. Die Ownership im Auge zu behalten ist das Problem. Und ja das geht mit smart pointern natürlich einfacher. Dazu wurden sie ja erfunden.
-
@john-0 sagte in vector mit basisklassen in einen mit abgeleiteten klassen casten?:
@Tyrdal sagte in vector mit basisklassen in einen mit abgeleiteten klassen casten?:
Das ist natürlich völliger Quark. Man muss dann natürlich selber auf das Löschen dieser Zeiger achten, aber sonst ist da nix wildes bei. In C++98 ging es oftmals gar nicht anders.
Mit C++98 gab es bereits boost::shared_ptr (seit 1.23.0 dabei d.h. 2001), d
C++ gibt's nun aber schon länger als seit 2001. Und ich persönlich kenne auch die Zeit vor 98. Ich sage nicht, daß das heutzutage die beste Idee ist, aber das das nun automatisch zum Ende der Welt führt ist nunmal auch nicht so.
-
@Tyrdal sagte in vector mit basisklassen in einen mit abgeleiteten klassen casten?:
C++ gibt's nun aber schon länger als seit 2001. Und ich persönlich kenne auch die Zeit vor 98. Ich sage nicht, daß das heutzutage die beste Idee ist, aber das das nun automatisch zum Ende der Welt führt ist nunmal auch nicht so.
In der Zeit vor der ISO Norm gab es aber keine STL, insofern erübrigt sich diese Diskussion dann ohnehin. Die STL entstand nach der Vorlage der Booch Components (noch für Ada entwickelt), und hat ganz klar die Intention, dass in den Container abgelegte Objekte vom Container verwaltet werden. Daher halte ich es nicht für zielführend hier einen Container in dieser Art und Weise zu nutzen. Dann doch lieber ein normales Array, da weiß man sofort, dass man selbst für die Datenhaltung verantwortlich ist.
@titan99_ sagte in vector mit basisklassen in einen mit abgeleiteten klassen casten?:
CppCon 2017: Bjarne Stroustrup “Learning and Teaching Modern C++” (7:15) Transkript: "...instead of stifling yet another innocent novice"
Ich halte das bei Container generell für schlecht, weil es gegen die Intention des Designs der Container geht. Bei Anfängern ist es nochmals schlechter.
-
@john-0 sagte in vector mit basisklassen in einen mit abgeleiteten klassen casten?:
Und bitte daran denken, wir reden hier über einen Anfänger, d.h. jemanden der nicht wirklich weiß wie man mit rohen Zeiger umgehen muss. Sein Code räumt die Zeiger jedenfalls nicht sauber ab.
Wäre es dann nicht sinnvoll den Thread zu splitten?
Ich fürchte wir haben den TE mit den ganzen Argumenten bereits erschlagen. Und wenn ich ehrlich bin mich auch.
-
@Tyrdal sagte in vector mit basisklassen in einen mit abgeleiteten klassen casten?:
Die Ownership im Auge zu behalten ist das Problem.
Ähm ja. Warum denkst Du dass ich das sagte?
-
@john-0 sagte in vector mit basisklassen in einen mit abgeleiteten klassen casten?:
Die STL entstand nach der Vorlage der Booch Components
Nein
-
@Quiche-Lorraine sagte in vector mit basisklassen in einen mit abgeleiteten klassen casten?:
Wäre es dann nicht sinnvoll den Thread zu splitten?
Definitiv!