Sample Container-Klasse

Hinweis

Dieses Thema befindet sich in der Microsoft C++-Dokumentation als ein nicht funktionsfähiges Beispiel für Container, die in der C++-Standardbibliothek verwendet werden. Weitere Informationen finden Sie unter C++-Standardbibliothekcontainer.

Beschreibt ein Objekt, das eine unterschiedliche Abfolge von Elementen steuert, in der Regel vom Typ Ty. Die Folge ist unterschiedlich gespeichert, abhängig vom tatsächlichen Container.

Ein Containerkonstruktor oder eine Memberfunktion finden möglicherweise Anlass, den Konstruktor Ty(const Ty &) oder die Funktion Ty::operator =(const Ty &) aufzurufen. Wenn solch ein Aufruf eine Ausnahme auslöst, ist das Containerobjekt verpflichtet, seine Integrität beizubehalten, und jede Ausnahme, die es entdeckt, erneut auslösen. Sie können ein Containerobjekt sicher austauschen, zuweisen, löschen oder zerstören, nachdem es eine dieser Ausnahmen auslöst. Im Allgemeinen jedoch können Sie den Zustand der vom Containerobjekt kontrollierten Sequenz andernfalls nicht vorhersagen.

Einige zusätzliche Vorsichtsmaßnahmen:

  • Wenn der Ausdruck ~Ty eine Ausnahme auslöst, wird der resultierende Zustand des Containerobjekts nicht definiert.

  • Wenn der Container ein Allocator-Objekt al speichert und al eine Ausnahme auslöst, die nicht als Ergebnis eines Aufrufs al.allocateerfolgt, wird der resultierende Zustand des Containerobjekts nicht definiert.

  • Wenn der Container ein Funktionsobjekt comp speichert, um zu bestimmen, wie die kontrollierte Sequenz sortiert wird und comp eine beliebige Ausnahme auslöst, ist der resultierende Status des Containerobjekts nicht definiert.

Die Containerklassen, die von der C++-Standardbibliothek definiert werden, erfüllen noch weitere Anforderungen, wie in den folgenden Abschnitten beschrieben.

Containerklassenvorlagenliste stellt deterministisches und nützliches Verhalten bereit, auch wenn die oben beschriebenen Ausnahmen vorhanden sind. Wenn beispielsweise eine Ausnahme während des Einfügens von einem oder mehreren Elementen ausgelöst wird, bleibt der Container unverändert, und die Ausnahme wird erneut ausgelöst.

Bei allen Containerklassen, die von der C++-Standardbibliothek definiert sind, wird bei Aufrufen der folgenden Memberfunktionen, , push_backoder push_front, eine Ausnahme ausgelöst, insertder Container unverändert gelassen, und die Ausnahme wird erneut ausgelöst.

Für alle containerklassen, die von der C++-Standardbibliothek definiert werden, wird keine Ausnahme bei Aufrufen der folgenden Memberfunktionen ausgelöst: pop_back, . pop_front

Die Memberfunktion erase löst eine Ausnahme nur aus, wenn ein Kopiervorgang (Zuweisung oder Copy-Konstruktion) eine Ausnahme auslöst.

Darüber hinaus wird keine Ausnahme ausgelöst, während des Kopiervorgangs eines Iterators, der von einer Memberfunktion zurückgegeben wird.

Die Memberfunktion swap macht zusätzliche Zusagen für alle Containerklassen, die von der C++-Standardbibliothek definiert werden:

  • Die Memberfunktion löst eine Ausnahme nur dann aus, wenn der Container eine Zuweisungsobjekt al speichert und al löst beim Kopiervorgang eine Ausnahme aus.

  • Verweise, Zeiger und Iteratoren, die getauschte Elemente der gesteuerten Sequenzen anzeigen, bleiben gültig.

Ein Objekt einer Containerklasse, die von der C++-Standardbibliothek definiert wird, reserviert Speicher und gibt ihn für die gesteuerte Sequenz frei, die sie durch ein gespeichertes Objekt vom Typ Alloc kontrolliert. Dieser ist gewöhnlich ein Vorlagenparameter. Ein solches Allocator-Objekt muss dieselbe externe Schnittstelle wie ein Objekt der Klasse allocator<Ty>aufweisen. Insbesondere Alloc muss derselbe Typ sein wie Alloc::rebind<value_type>::other

Für alle Containerklassen, die von der C++-Standardbibliothek definiert sind, gibt die Memberfunktion Alloc get_allocator const; eine Kopie des gespeicherten Allocator-Objekts zurück. Beachten Sie, dass das gespeicherte Zuweisungsobjekt nicht kopiert wird, wenn das Containerobjekt zugewiesen wird. Alle Konstruktoren initialisieren den wert, in dem Alloc der allocatorKonstruktor keinen Allocatorparameter enthält.

Entsprechend dem C++-Standard kann eine Container-Klasse, die die C++-Standardbibliothek definiert, folgendes darstellen:

  • Alle Objekte der Klasse Alloc sind beim Vergleich gleich.

  • Der Typ Alloc::const_pointer ist identisch mit const Ty *.

  • Der Typ Alloc::const_reference ist identisch mit const Ty&.

  • Der Typ Alloc::pointer ist identisch mit Ty *.

  • Der Typ Alloc::reference ist identisch mit Ty&.

In dieser Implementierung treffen Container jedoch nicht solche vereinfachende Annahmen. Daher arbeiten sie ordnungsgemäß mit Zuweisungsobjekten, die ehrgeiziger sind:

  • Alle Objekte der Alloc-Klasse werden beim Vergleich nicht gleich abschneiden. (Sie können mehrere Speicherpools verwalten.)

  • Der Typ Alloc::const_pointer muss nicht mit dem identisch const Ty *sein. (Ein const-Zeiger kann eine Klasse sein.)

  • Der Typ Alloc::pointer muss nicht mit dem identisch Ty *sein. (Ein Zeiger kann eine Klasse sein.)

Anforderungen

Header: <Beispielcontainer>

Siehe auch

<Sample Container>