[英]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.