vector-ähnlicher Container ohne Exceptions gesucht



  • Ich suche eine Containerklasse<T, allocator>, die Iteratoren, operator[], reserve(), capacity(), resize(), size(), Kopierkonstruktor/operator= anbietet (Komplexität wie bei vector) und keine Exceptions wirft (der allocator darf werfen).
    valarray kommt leider nicht in Frage, weil dieser bei resize() nicht die Elemente beibehält.

    Gibt es eine solche Klasse?



  • Wie wär's, wenn du den std::vector<T,allocator> in einer eigenen Klasse kapselst, und die exceptions darin abfängst ?



  • Taurin schrieb:

    Wie wär's, wenn du den std::vector<T,allocator> in einer eigenen Klasse kapselst, und die exceptions darin abfängst ?

    Mir geht es nicht um die Exceptions, die geworfen werden, sondern um den zusätzlichen Code, der dadurch erzeugt wird.



  • öhm, std::vector wirft von sich aus ja keine Exceptions (außer bei at()). Dann musst du schon aufpassen, was T und was allocator ist.



  • kingruedi schrieb:

    öhm, std::vector wirft von sich aus ja keine Exceptions (außer bei at()). Dann musst du schon aufpassen, was T und was allocator ist.

    T ist kein Problem (unsigned int), aber - ups, ich dachte gelesen zu haben, dass auch der Kopierkonstruktor wirft. Ok - danke. 😉



  • Natürlich wirft der Kopierkonstruktor, weil er Speicher anfordern muss. Wenn du eine Klasse willst, deren Kopierkonstruktor selbst (vom Kopieren der T's abgesehen) nicht wirft, dann dürfte am ehesten eine Art Smart Pointer bzw. Handle in Frage kommen.

    Edit: Ähm, vergiss das. Da wirft dann ja der Allokator.



  • einfach ein Allokator schreiben der nicht wirf, sollte doch reichen?



  • Dimah schrieb:

    einfach ein Allokator schreiben der nicht wirf, sollte doch reichen?

    Ja. Mir ist aber noch aufgefallen, dass ich noch ein paar ganz andere Anforderungen habe und ich daher meine eigene Klasse schreiben muss.


Anmelden zum Antworten