Ist möglich ist die Verwendung von std::map in C++ mit einer Klasse ohne eine Kopie Betreiber?
Bin ich mit einer Klasse (Objekt), dass nicht jede Kopie-operator : es ist im Grunde nicht kopiert werden kann, jetzt. Ich habe eine
std::map<int,Object> objects
variable, die Listen von Objekten mit einem int-id. Wie könnte ich ein Objekt hinzufügen, diese Karte zimmerreserviereung, ohne das Sie verwenden, kopieren Sie den Betreibern?
Ich habe versucht,
objects.insert(std::pair<0,Object()>);
aber das wird nicht kompilieren. Ich möchte nur, um meine Objekt zunächst im inneren der Karte mit dem Standard-Konstruktor, sondern schreiben
objects[0];
scheitert...
Danke 🙂
InformationsquelleAutor der Frage Tuxer | 2011-06-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
In C++03, Objekte, die gespeichert werden in STL-Containern muss werden kopierbar. Dies ist, weil eine STL-container
std::allocator
tatsächlich verwendet die Platzierung version desnew
Betreiber zu kopieren konstruieren Sie die Objekte im pre-allocated memory-Blöcke, und das erfordert die Existenz eines copy-Konstruktor Kopie der aktuellen Instanz des Objekts, das Sie wollen, sind Sie auf hinzufügen, um den Behälter in die Speicher-Adresse, die hatte gewesen im Voraus zugewiesen, durch den container-Zuweisung. Also die einzige Möglichkeit wäre, zu speichern Zeiger auf die Objekte statt der Objekte selbst. Daher können Sie das folgende tun:InformationsquelleAutor der Antwort Jason
Nicht in C++03. Wie werden Sie gehen, um das Objekt von dort, wo es nun in die map, ohne einen copy-Konstruktor?
In C++0x dann konnten Sie in die Karte, und in der Theorie, perfekt nach vorne zu konstruieren, die man von anderen Argumente.
Edit: Du könnte tauschen Sie es, wenn es Swap und können Sie Standard erstellen Sie in-place-mithilfe
operator[]
.InformationsquelleAutor der Antwort Puppy
Da das Objekt nicht kopieren-baubar, könnte man erstellen Sie Ihre Karte mit shared_ptr :
Kümmert sich um die Zerstörung von Objekten.
InformationsquelleAutor der Antwort BЈовић