C ++ Warum ruft die Vektorinitialisierung den Kopierkonstruktor auf?

8

Wenn Sie einen Vektor folgendermaßen initialisieren:

%Vor%

Ruft den Standardkonstruktor einmal auf und ruft dann den Kopierkonstruktor zehnmal auf. Also, wenn ich es richtig verstehe, werden die Objekte im Vektor alle vom Kopierkonstruktor erstellt.

Kann jemand den Grund für den Aufruf des Kopierkonstruktors und nicht für den Standardkonstruktor erklären? Oder auch nur den Speicher ohne die Objekte zuzuteilen?

    
oopsi 08.09.2012, 19:54
quelle

1 Antwort

15

Es wird Speicher ohne Objekte zugewiesen, außer dass Sie eine Anfangsgröße von 10 angegeben haben, also um 10 Objekte zu erstellen. Wenn Sie Speicher für 10 Objekte benötigen, ohne sie tatsächlich zu erstellen, können Sie Folgendes tun:

%Vor%

Wenn Sie nach der Signatur des Konstruktors suchen, die Sie verwenden, ist etwa:

%Vor%

Damit übergeben Sie einen Wert, der verwendet werden soll, um die Spots zu füllen, von denen Sie sagen, dass sie erstellt werden sollen. Wenn Sie keinen Wert angeben, erstellt er einen (mit dem Standard-ctor), der an den ctor übergeben wird, und erstellt dann Kopien davon im Vektor selbst.

Es gibt keine wirkliche Frage, ob andere Dinge tun könnte, aber das bietet ein vernünftiges Gleichgewicht zwischen Einfachheit (geben Sie keinen Wert an), Vielseitigkeit (geben Sie einen Wert an, wenn Sie wollen) und Code Größe (vermeiden Sie die Verdoppelung der gesamten ctor, nur um den Inhalt standardmäßig zu konstruieren).

    
Jerry Coffin 08.09.2012, 19:58
quelle

Tags und Links