Für std :: map wird, wie verhalten sich einsetzen, wenn er den Behälter, um die Größe hat und der Speicher ist nicht verfügbar?

StackOverflow https://stackoverflow.com/questions/104483

  •  01-07-2019
  •  | 
  •  

Frage

Für std :: map, wie verhält sich ein, wenn es um den Behälter, um die Größe hat und der Speicher ist nicht verfügbar?

War es hilfreich?

Lösung

STL Karte muss nicht auf Container „Größe ändern“. Karte (wie Liste) ist ein Knoten basierend Behälter; jeder Einsatz reserviert Speicher.

Das heißt, aus dem Speicher Situation wie jede andere out-of-memory Situation in C ++ behandelt: es wirft ein std :: bad_alloc. STL-Container mit Standardverteilern tun nichts Besonderes, sie alle am Ende über Standard-neu / löschen Betreiber Zuteilung irgendwie .

In STL-Karte Fall wird es Ausnahme auslösen und sonst verhalten, als ob es nicht aufgerufen wurde. Das heißt, der Behälter unverändert bleiben.

Andere Tipps

New wird eine Ausnahme werfen. So einfach ist das.

Der Einsatz wird nicht passieren, und weder wird der Inhalt des Verzeichnisses geändert oder beschädigt werden.

Um auf Nils Antwort zu erweitern (ja, es wird werfen), aber was passiert, wenn es wirft manchmal in der spec verwirrend.

In 17.2.2 der Spezifikation (in Bezug auf Karten / Ausnahmen), wenn insert () wirft, hat diese Funktion keine Wirkung. Dies ist eine starke Garantie für Karte. Dies unterscheidet sich von Containern mit zusammenhängenden Zuordnung wie Vektor oder deque.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top