문제

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)
도움이 되었습니까?

해결책

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)
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top