C++ 11 (i C++ 14) Kontenery STL mają funkcje składowe noexcept
i clear()
.Czy elementy kontenera STL są wyraźnie wymagane, aby być (nie tylko) podatne na destrukcję?
Oznacza to, że elementy powinny mieć również destruktory noexcept
lub przynajmniej faktyczne elementy przechowywane w kontenerach nie powinny generować żadnych wyjątków po zniszczeniu - lub bardziej poprawnie, że odpowiednie wywołanie allocator_traits<Allocator>::destroy
nie powinno zostać wywołane.
Czy jest to określone jako wymaganie (jednoznacznie lub dorozumiane przez inne wyraźne wymaganie) w dowolnym miejscu standardu? Jeśli nie, dlaczego?
Wiem, że is_nothrow_constructible
wymaga destruktora noexcept
, ale nie dotyczy to samego noexcept
, a wymagania kontenera są określone raczej w kategoriach pojęć niż szablonów znaków.
Destruktor kontenera może przechwytywać i ignorować wszelkie wyjątki z destruktora elementu. –