Also habe ich ein gutes Stück googeln versucht, um herauszufinden, ob es einige beste Smart-Zeiger, um dies zu handhaben, aber ich habe nicht in der Lage, sich auf eine gute Wahl.welche Art von Zeiger für eine eigene Sammlung von Zeigern zu verwenden
struct Car
{
int m_doors;
int m_headlights;
//etc..
}
Lets sagen, ich habe einige Klasse Auto. Ich habe auch eine std::map<int carkey, Car*>
das ist die JunkYard.
Ein Auto * kann zu dem JunkYard von einem Fahrer hinzugefügt werden, der Fahrer selbst hat das Auto neu, aber der Fahrer verliert sofort alle Verantwortung des Autos *.
Ich möchte, dass der JunkYard für all seine Autos verantwortlich ist. Autos im JunkYard können von Leuten benutzt werden, um Teile zu entfernen und Altmetall aus dem Auto zu nehmen, oder zerquetscht zu werden, aber der JunkYard zerstört es für immer.
Am Ende des Tages zerstört der JunkYard alle seine Autos und schaltet sich ab.
-
A) Wenn dies ein Multi-Thread-App waren, wo Treiber Autos gleichzeitig zugreifen können, während die JunkYard Autos zerstören könnte ich dachte, dass wahrscheinlich ein shared_ptr wäre am besten? Ist das aber Overkill? Andere Threads können auf das Auto zugreifen, aber sie werden niemals langfristige Eigentümer davon sein, es muss immer dem JunkYard gehören.
B) Wenn dies single threaded wäre, wäre die beste Wahl - vorausgesetzt, es ist immer noch eine Karte < some_smart_car_ptr>. Ich möchte, dass der Container das Auto nimmt, um die Autos selbst zu löschen. Wenn Sie beispielsweise map.erase (...) aufrufen, sollte der Zeiger gelöscht und aus der Karte entfernt werden.
Was ist 'Karte'? Wenn das aus irgendeinem Grund nicht funktioniert, würde ich vorschlagen: map > '. –
Philipp
Vielen Dank für diesen Vorschlag, mit der Karte und Einfügen in die Karte könnte dazu führen, dass die Neuordnung und damit das Kopieren und Verschieben von Autos richtig? Ist unique_ptr möglich, auf unique_ptr zuzugreifen, indem es als ref übergeben wird? Ich werde in diese –
skimon
schauen unique_ptr ist C++ 11 richtig? Ich habe keinen Zugang dazu. – skimon