繁体   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