2016-11-14 2 views
2

Ausnahme für die Elementfunktion at(), ich kann nicht denken, Ausnahmen von std::vector Funktionen ausgelöst werden, sondern durch seinen Zuordner oder durch seine Elemente Konstruktoren und Zuweisungsoperatoren. Daher kann die Ausnahmeseutralität eine sehr wünschenswerte Garantie für die Implementierung Ihrer eigenen Zuweiser sein. Sie könnten beispielsweise den gesamten erforderlichen Speicher im Voraus reservieren und sich dann auf die Noexcept-Garantie eines Zuweisers verlassen, der an seinen Container weitergegeben wird.Ist std :: Vektor Ausnahme neutral?

Bietet der C++ - Standard eine Ausnahme-Neutralität von std::vector<T,Alloc>?

+0

"Sie könnten alle erforderlichen Speicher zuordnen" Was ist, wenn Sie das nicht können? – Arunmu

+1

definiere genau, was es für dich bedeutet der Begriff "Ausnahme Neutralität" –

+0

@Arunmu Wenn Sie das nicht tun können, dann werfen Sie früh. –

Antwort

1

Neben Speicherzuordnungen gibt es eine Situation, in der vector selbst auch Ausnahmen auslösen wird: die at() Member-Funktion.

So, nach reserve() genügend Speicher, Sie sind garantiert, dass keine Ausnahmen ausgelöst werden, vorausgesetzt, dass die Konstruktoren und Zuweisungsoperatoren des Vektors (die als Teil des Änderns des Vektors aufgerufen werden) keine Ausnahmen werfen werden, und es gibt keine Anrufe außerhalb der Reichweite zu at().

+0

Es gibt keine Macken mit 'operator ='? – Yakk

+0

'Operator =' auf dem Vektor selbst würde unter der Kategorie "Speicherzuweisungen" fallen. –