Verwirrung bei new



  • Hallo,

    ich habe gestern folgenden Code gesehen:

    template<typename TYPE> class Array
    {
    public:
        [...]
        void bla(int index)
        {
             [...]
             ::new (&Data[index]) TYPE;
             [...]
        }
        [...]
    protected:
        TYPE* Data;
    };
    

    was bedeutet dieser new Aufruf? Ich kenne new nur in der Form x *y = new x(); Außerdem meldet mein Compiler (C++ Builder), dass er mit der Zeile nichts anfangen kann. (Kann mich aber erinnern, dass er es vor 2 Tagen gefressen hatte, weiß aber nicht was ich da verändert hatte, das ist zumindest der originale Code.)

    greetz KN4CK3R



  • Es handelt sich hier um den placement-new operator.
    Es wurde bereits Speicher alloziert und über den placment-new operator gibst du nun an, wo in diesem Speicher das Objekt erstellt werden soll (hier also an der Adresse, die Data[index] hat).

    Einfach mal google nach "placement new" befragen.



  • Hat das denn irgendwelche Vorteile gegenüber:

    Data[ Index ] = new XY();
    

    ?



  • Erstens heißt es new T; und zweitens ist das etwas völlig anderes.



  • danke, unter "placement new" findet man wirklich was. nur mit "new" hab ich keine Erklärung auftreiben können.
    Nochmal zum Verständnis:
    Die Zeile in dem Code überschreibt das index'ste Element im Array Data mit der Speicheradresse eines neu erzeugten Objekts vom Typ TYPE?

    greetz KN4CK3R


  • Mod

    KN4CK3R schrieb:

    danke, unter "placement new" findet man wirklich was. nur mit "new" hab ich keine Erklärung auftreiben können.

    Schon einmal daran gedacht, C++ als Suchwort hinzuzufügen?
    Google: c++ new
    Die Top-Treffer erklären auch die placement Variante.

    Nochmal zum Verständnis:
    Die Zeile in dem Code überschreibt das index'ste Element im Array Data mit der Speicheradresse eines neu erzeugten Objekts vom Typ TYPE?

    greetz KN4CK3R

    Nein, es wird ein TYPE an der Stelle des index'ste Elements erzeugt.[/quote]


Anmelden zum Antworten