2012-04-26 48 views
0

为什么C++这样的方式创建的,如果你有一个A类和声明A型的数组,那么整个数组被填充有默认的构造函数实例化的对象班上?声明的对象数组:实例化它们

+4

为了鼓励你使用'std :: vector';) – 2012-04-26 22:02:49

+0

为了解决这个问题,会有什么替代方案?如果声明一个对象数组没有实例化它们,那么你将如何手动实例化它们?你需要使用新的位置来做到这一点吗?难道这不是很容易出错吗?鉴于对象需要在使用之前实例化,那么自动执行它似乎是对我来说最好的解决方案。如上所述,如果您希望在需要时使用它,请使用容器而不是静态数组。 – 2012-04-26 22:07:23

回答

2

因为当您创建一个给定大小的数组时,数组中的每个元素一旦创建就必须有效。

如果你想要一个不同的行为,你可以使用vectorpush_back。矢量被创建为空;当你想添加一个新的元素时,push_back将会以你想要的方式创建一个对象并在矢量中创建一个副本。

+0

你可以使用['vector :: reserve'](http://www.cplusplus.com/reference/stl/vector/reserve/)来预留容量而不需要构建任何东西。 – 2012-04-26 22:05:29

+0

虽然,你不需要*有*创建一个向量空 - 你可以传递一个初始大小的构造函数,如果你想。 – 2012-04-26 22:06:34