Domanda

I was wandering the C++ specifications (cplusplus.com) and found that there's nothing told about exception safety for std::unordered_map

so basically if I write

map["foo"]=5;

and an exception is thrown because I'm out of memory or bad_alloc, what can I assume about my map?

  • It is left in a valid state? (basic guarantee)
  • It is left unchanged? (strong guarantee)
  • It is left in unvalid state ? (no guarantee)
È stato utile?

Soluzione

23.2.4.1 Exception safety guarantees [associative.reqmts.except]

2 For associative containers, if an exception is thrown by any operation from within an insert or emplace function inserting a single element, the insertion has no eftect.

This paragraph applies to the indexing operator. So:

  • It is left unchanged. (strong guarantee)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top