Parameter - Was geht'n hier ab!?



  • explicit vector ( const Allocator& = Allocator() );
    

    Erklärt mir das einer?

    Danke!



  • Sieht nach einer Deklaration eines Konstruktors aus. Kannst Du das, was Du wissen willst eingrenzen?

    explicit vector ( const Allocator& = Allocator() );
                      ^^^^^^^^^^^^^^^^   ^^^^^^^^^^^
                            Typ          Default-Wert
    

    Parameternamen sind optional. Hier wurde der Name weggelassen.



  • Eingrenzen, hum. Also meine Frage bezieht sich eigentlich nur darauf, wie so ein Ctor-Aufruf aussehen würde. Oder ist das der default-ctor?

    Danke!



  • Entweder so

    vector()
    

    oder alternativ, wenn du einen anderen, als den Standard-Allokator verwenden willst:

    vector(dein_allokator)
    


  • Also falls ein Allokator-Objekt übergeben wird, wird mit diesem initialisiert, ansonsten wird ein neues Objekt angelegt?



  • Es wird ein neues Objekt angelegt, dass zur internen Speicherbeschaffung entweder den Standardallokator (der new und delete benutzt) verwendet oder einen von übergebenen speziellen Allokator, was aber eher die Ausnahme ist.



  • Der vector selbst wird ganz normal allokiert, wie du das definierst. Also automatisch (Regelfall) oder dynamisch (z.B new), was allerdings nicht sehr viel Sinn macht.

    Den allocator wird benutzt, um die internen Objekte zu erstellen. (Stell dir vor du schreibst eine eigene Implementierung eines Arrays, dann wirst du irgendwann man Platz schaffen müssen für Objekte und anstatt da fest new hinzuschreiben machtst du einen Aufruf an einen allocator, um jedem die Freiheit zu lassen da etwas eigenes zu benutzen.)

    Das ist eine Art policy-based design und wird in der Standardbibliothek oft benutzt (schau einfach mal in ein paar templates rein, dann wirst du so ähnliche Konstrukte sehr oft finden):
    http://en.wikipedia.org/wiki/Policy-based_design


Anmelden zum Antworten