是否立即为作为类成员的对象数组调用构造函数?
Posted
技术标签:
【中文标题】是否立即为作为类成员的对象数组调用构造函数?【英文标题】:Is the constructor called immediately for an array of objects as a member of the class? 【发布时间】:2011-11-22 21:38:40 【问题描述】:class gene
int ind;
gene()
ind = 0;
class network
gene g[10];
main()
network n;
我应该为g数组中的每个对象调用构造函数,还是会自动调用?
例如,我应该按如下方式更改网络类:
class network
gene g[10];
network()
for(int i = 0; i < 10; i++)
g[i] = gene();
【问题讨论】:
如果尚未构建,您的更改将是一场灾难。您将在未构造的对象上调用 'operator='。 我并不是要刻薄,但在您提出问题的时间里,您本可以对其进行测试。 @Steve :测试只会证明一个编译器的行为,这不一定是标准所保证的。 @Steve 你是 100% 正确的。但是我很困惑,我什么都想不出来。 有点题外话:你应该熟悉构造函数初始化列表:gene::gene() : ind(0)
【参考方案1】:
在你的情况下,因为gene
有一个重要的默认构造函数,数组的每个元素都将为你默认构造。即,不,您的更改是不必要的。
如果您的数组的底层类型是 POD 类型,您将需要手动初始化元素。但是,您这样做的方式并不理想。你会想使用 value-initialization 代替:
class network
somePodType x[10];
public:
network() : x()
;
【讨论】:
以上是关于是否立即为作为类成员的对象数组调用构造函数?的主要内容,如果未能解决你的问题,请参考以下文章