Wie funktioniert die Zuweisung von std::vector<T>



  • Wenn std::vector mit einer Klasse wie:

    struct A
     double x;
     double y;
    }
    

    instantiiert wird, also so:

    std::vector<A> v1;
    // .. hier v1 mit As füllen
    

    Was passiert bei einer Zuweisung dieses vectors zu einem anderen

    std::vector<A> v2 = v1;
    

    Wird dann eine flache Kopie gemacht? Es sind in der Klasse / Struct A keine Pointer und nur build-in Typen, die eigentlich leicht zu kopieren sind.
    Aus der doku http://www.cplusplus.com/reference/stl/vector/operator=/
    werd ich nicht ganz schlau:

    Assigns a copy of vector x as the new content for the vector object.

    The elements contained in the vector object before the call are dropped, and replaced by copies of those in vector x, if any.

    Es gibt also Kopien von den A-Elementen und diese kopieren auch die Werte mit, oder?



  • ja natürlich. Soweit ich weiß, wird für jedes Element in vector A der Zuweisungsoperator bzw. kopierkonstruktor aufgerufen. Wenn du keinen eigenen op= definiert hast, generiert der compiler einen für dich und macht eine flache Kopie aller Werte / zeiger in deiner struct.


Anmelden zum Antworten