我認爲這個問題是您vector
constructor call(2 :填寫構造):
std::vector<std::unique_ptr<int []>> vec(5, nullptr);
這裏,y你本質上是調用vector(size_t(5), std::unique_ptr<int[]>(nullptr))
。請注意,這將創建一個std::unique_ptr
的臨時實例,從您的nullptr
參數隱式轉換/構建。然後vector
構造函數應該複製你傳遞給它的值n
來填充容器;因爲你不能複製任何unique_ptr
(即使是空的),你會從該構造函數的代碼中得到編譯器錯誤。
如果你立即更換那些最初nullptr
值,你應該建立一個空的vector
和push_back
新的元素:
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)
...
要使用一定數量空值的初始化vector
,省略了第二個參數:
std::vector<std::unique_ptr<int []>> vec(5);
這將構造每個unique_ptr
與default constructor,不需要任何複製。
來源
2016-11-30 01:16:40
qxz
是否有一個原因,你不是'std :: vector>'? –
Galik
@Galik號但我只需要一個固定大小的數組,所以我使用原始數組。 – Yves