委托构造函数的评估

Evaluation of Delegated Constructor

本文关键字:评估 构造函数      更新时间:2023-10-16

我有兴趣了解使用委托时构造函数计算的顺序。

这是我的代码片段:

Number(){
    length = 100;
    values = new int[length];
};
Number(int len) : Number(){
    length = len;
}

请注意,它们都会修改长度,但只有一个将长度应用于新数组。此代码有效。

我的问题: 为什么有效? 构造函数是否仅应用非冗余代码? 或者,在这种情况下,默认构造函数在非默认构造函数中的代码之前调用?

谢谢你的时间!

构造函数不知道如何跳过任何内容,除非你告诉他们这样做,但在构造函数委托的情况下,这种沟通将很困难,因为值可以未初始化,或者它们可以被填充,并且真的不容易区分。

而是以这种方式构建它:

Number() : length(100) {
  allocateValues();
};
Number(int len) : length(len) {
  allocateValues();
}
void allocateValues() {
  values = new int[length];
}

这确实是很糟糕的形式,因为std::vector和朋友可以帮助你。使用 insert 考虑这样的事情:

Number() {
  values.insert(values.begin(), len, 100);
}
Number(int len) {
  values.insert(values.begin(), len, 0);
}