以下列方式初始化矢量时:
std::vector<MyClass> MyVec(10);
它调用默认构造函数一次,然后再调用复制构造函数10次。 因此,如果我理解正确,向量中的对象都是由复制构造函数创建的。
有人可以解释调用复制构造函数而不是默认构造函数的原因吗? 或者甚至只是在没有对象的情况下分配内存?
答案 0 :(得分:15)
它会分配没有对象的内存,除了你指定的初始大小为10,所以它有来创建10个对象。如果您想要10个对象的内存而不实际创建它们,您可以执行以下操作:
std::vector<MyClass> MyVec;
MyVec.reserve(10);
如果你看起来正在使用的构造函数的签名是这样的:
vector(size_t num, T initial_value = T());
那就让你传递一个值来填充你告诉它创建的点。如果你没有指定一个值,它会创建一个(使用默认的ctor)传递给ctor,然后在向量本身中复制它。
没有真正的问题,可以做其他事情,但这提供了简单性(不指定值),通用性(如果需要指定值)和代码之间的合理平衡大小(避免重复整个ctor只是默认构造内容)。