C++为什么矢量初始化调用复制构造函数



当您以以下方式初始化矢量时:

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)之间提供了合理的平衡。

最新更新