C ++将具有构造函数的对象添加到数组中

时间:2011-11-11 10:52:54

标签: c++ arrays object

当我声明一个数组时,所有变量/对象都被声明。但是对象会发生什么,如果他们的类有构造函数?我正在使用的类有2个构造函数 - 一个没有参数,一个有一些参数。声明后第一个构造函数是否会激活?或者没有构造函数会激活?

如果第一种情况发生,我将不得不创建一个替换构造函数的函数。

那么,新声明的数组中的对象会发生什么?

2 个答案:

答案 0 :(得分:8)

这取决于你如何声明数组。成员将是默认值,值或复制初始化:

Foo x[] = { Foo(1), Foo(true, 'a'), Foo() };  // copy-initialize
Foo x[3] = { };                               // value-initialize
Foo x[3];                                     // default-initialize

对于类类型,default-和value-initialization调用默认构造函数。复制初始化可以直接调用适当的构造函数。

如果您不想使用默认构造函数,则不会使用大括号初始值并将每个成员拼写出来。

答案 1 :(得分:2)

如果底层类型具有非平凡的默认构造函数,则数组将调用所有对象的默认构造函数。

我不完全记得规则,但是int,char * s,其成员都具有琐碎构造函数的结构等等,都具有普通的默认构造函数。除非你明确地这样做,否则不会初始化这些东西的数组(以及这些东西的数组数组等)。

显式声明的默认构造函数永远不会是微不足道的,因此数组中的Foo对象将是默认构造的。