是否立即为作为类成员的对象数组调用构造函数?

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()  
;

【讨论】:

以上是关于是否立即为作为类成员的对象数组调用构造函数?的主要内容,如果未能解决你的问题,请参考以下文章

成员对象和封闭类

constructor&object 的联系与对比

C++中的派生类,可以不定义对象直接调用基类的成员和调用自己的成员函数嘛???

类学习

扩展1

多态性