Angenommen, ich habe einen STL-Vektor, der den Klassentyp "xx" enthält. xx ist abstrakt. Ich habe in der Frage führen, wo der Compiler lässt mich nicht „instanziiert“ wenn ich etwas wie das folgende tun:stl vector.push_back() abstrakte Klasse kompiliert nicht
std::vector<xx> victor;
void pusher(xx& thing)
{
victor.push_back(thing);
}
void main()
{
;
}
Ich nehme an, das liegt daran, dass der Copy-Konstruktor muss aufgerufen werden. Ich habe dieses Problem gelöst, indem ich xx * im Vektor statt xx gespeichert habe. Gibt es eine bessere Lösung? Was ist es?
Aber * nicht * std :: auto_ptr. Diese können aufgrund ihrer seltsamen Kopiesemantik nicht in STL-Container eingegeben werden. –
Sie könnten auch Boost's ptr_vector - http://www.boost.org/doc/libs/1_39_0/libs/ptr_container/doc/ptr_container.html – bdonlan
verwenden, um nur zu verdeutlichen, dass Sie bei der Verwendung von stl-Vektor grundsätzlich den Zustand von xx kopieren und dann, wenn Sie es abrufen, instanziiert C++ zuerst xx und füllt es dann mit entsprechenden Eigenschaften? Anstatt nur auf das alte Objekt zu zeigen. Das ganze Problem ist, dass wir am Ende den Konstruktor von xx verwenden. – Ori