Sind STL-Containerelemente explizit (nicht) zerstörbar?

8

C ++ 11 (und C ++ 14) STL-Container haben noexcept destructors und clear() member functions.

Dies bedeutet, dass die Elemente auch noexcept destructors haben sollten, oder zumindest, dass die in Containern gespeicherten tatsächlichen Elemente keine Exceptions auslösen sollten, wenn sie zerstört werden - oder korrekterweise, dass der entsprechende allocator_traits<Allocator>::destroy call nicht werfen sollte / p>

Wird dies als eine Anforderung (ausdrücklich oder implizit durch eine andere ausdrückliche Anforderung) irgendwo im Standard angegeben? Wenn nicht, warum?

Ich weiß, dass is_nothrow_constructible einen noexcept destructor benötigt, aber is_constructible alone nicht, und die Containeranforderungen werden sowieso eher in Begriffen als in Templates für Typeigenschaften angegeben.

    
Chortos-2 27.03.2015, 15:07
quelle

1 Antwort

7
  

17.6.4.8/1 In bestimmten Fällen (Ersatzfunktionen, Handlerfunktionen, Operationen für Typen, die zur Standardisierung verwendet werden   Bibliotheksvorlagen-Komponenten), hängt die C ++ - Standardbibliothek von Komponenten ab, die von einem C ++ - Programm bereitgestellt werden.   Wenn diese Komponenten nicht ihren Anforderungen entsprechen, stellt der Standard keine Anforderungen an die   Implementierung.

     

17.6.4.8/2 Insbesondere sind die Effekte in den folgenden Fällen undefiniert:

     

...

     
  • wenn eine Ersatzfunktion oder eine Handler - Funktion oder ein Destruktor - Vorgang über eine Ausnahme beendet wird, es sei denn, dies ist in der   anwendbar Erforderliches Verhalten: Absatz.
  •   
    
Igor Tandetnik 27.03.2015, 15:14
quelle

Tags und Links