簡體   English   中英

C ++為什么向量初始化會調用復制構造函數

[英]C++ Why do vector initialization calls the copy constructor

以下列方式初始化向量時:

std::vector<MyClass> MyVec(10);

它調用默認構造函數一次,然后再調用復制構造函數10次。 因此,如果我理解正確,向量中的對象都是由復制構造函數創建的。

有人可以解釋調用復制構造函數而不是默認構造函數的原因嗎? 或者甚至只是在沒有對象的情況下分配內存?

除了你指定的初始大小為10之外,它將分配沒有對象的內存,因此它必須創建10個對象。 如果您想要10個對象的內存而不實際創建它們,您可以執行以下操作:

 std::vector<MyClass> MyVec;
 MyVec.reserve(10);

如果你看起來你正在使用的構造函數的簽名是這樣的:

vector(size_t num, T initial_value = T());

那就讓你傳遞一個值來填充你告訴它創建的點。 如果未指定值,則會創建一個(使用默認ctor)傳遞給ctor,然后在向量本身中復制該值。

沒有真正的問題,它可以做其他事情,但這提供了簡單(不指定值),多功能性(如果你想要指定一個值)和代碼大小之間的合理平衡(避免重復整個ctor只是為了默認構建內容)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM