Ich glaube, das Problem mit Ihrem vector
constructor call (2 : Füllkonstruktor):
std::vector<std::unique_ptr<int []>> vec(5, nullptr);
Hier, y Sie nennen im Wesentlichen vector(size_t(5), std::unique_ptr<int[]>(nullptr))
. Beachten Sie, dass dies eine temporäre Instanz von std::unique_ptr
erstellt, die implizit aus Ihrem Argument nullptr
konvertiert/konstruiert wurde. Der vector
-Konstruktor soll dann diesen Wert kopieren, den Sie an ihn n
Mal übergeben, um den Container auszufüllen; Da Sie keine unique_ptr
(sogar eine Null) kopieren können, erhalten Sie Ihren Compilerfehler innerhalb des Konstruktorcodes.
Wenn Sie sofort diese anfänglichen nullptr
Werte ersetzen, sollten Sie nur ein leeres vector
und push_back
Ihre neue Elemente konstruieren:
std::vector<std::unique_ptr<int []>> vec; // default constructor
vec.push_back(std::make_unique<int []>(3)); // push the elements (only uses the move
vec.push_back(std::make_unique<int []>(4)); // constructor of the temporary)
...
Um eine vector
mit einer bestimmten Anzahl von Nullwerten initialisiert werden, lassen Sie den zweiten Parameter :
std::vector<std::unique_ptr<int []>> vec(5);
Dies wird jedes unique_ptr
mit dem default constructor, nicht erforderlich ist jegliches Kopieren konstruieren.
Gibt es einen Grund, warum Sie nicht 'std :: vector>' tun? –
Galik
@Galik Nein. Aber ich brauche nur ein Array mit fester Größe, also verwende ich das RAW-Array. – Yves