Ich habe einen Vektor std::vector<MyClass> myclass_vec(10)
mit 10 initialisierten Objekten von MyClass
. Jetzt möchte ich diesen Vektor überschleifen und einen Verweis auf jedes MyClass
Objekt in einem anderen Vektor speichern std::vector<MyClass> myclass_vec_refs
. Der Grund, warum ich Referenzen speichern möchte, ist so, weil ich die Objekte nicht kopieren muss und natürlich auf das gleiche Objekt wie in myclass_vec
verweisen muss.Wie speichert man Referenzen auf Objekte aus einem Vektor in einem anderen Vektor in C++?
Aus irgendeinem Grund funktioniert dies nicht wie erwartet. Muss ich std::vector<&MyClass> myclass_vec_refs
so deklarieren?
Als ich durch andere Fragen hier gefragt wurde, lese ich über std::unique_ptr
. Wenn ich std::vector<std::unique_ptr<MyClass>> myclass_vec(10)
ändere, könnte ich keinen Bezug oder Zeiger in myclass_vec_refs
haben, da sie eindeutig erklärt werden. Korrigiere mich bitte, wenn ich mich irre.
Ein anderer Ansatz war std::shared_ptr
. Da es einen Referenzzähler enthält, könnte ich myclass_vec_refs
Punkt auf Objekte in myclass_vec
haben, aber ich lese das führt ziemlich viel Overhead und share_ptr sollte nur als letztes Mittel verwendet werden.
Ich weiß auch nicht, ob Referenzieren wie ich versuche, funktioniert. Was passiert, wenn ein Objekt in myclass_vec
gelöscht wird? Wird der Vektor myclass_vec_refs
um -1 skaliert, weil das Objekt nicht mehr existiert oder nur auf schlechten Speicher zeigt?
Ist es möglich, emplace_back
eine Referenz in der myclass_vec_refs
Vektor? Da dies das Objekt an Ort und Stelle erzeugt, schätze ich, dass dies nicht funktioniert und nur push_back
verwendet werden kann?
Warum nicht einfach speichern einen Iterator in dem anderen Vektor zu verwenden? – NathanOliver
Warum nicht Zeiger anstelle des zugewiesenen Objekts speichern? –
Warum nicht stattdessen Indizes speichern? –