【发布时间】:2014-04-09 22:35:56
【问题描述】:
类的构造函数是否有更简单的方法来指定内置类型的所有成员都应为零初始化?
这段代码 sn-p 出现在另一个帖子中:
struct Money
{
double amountP, amountG, totalChange;
int twenty, ten, five, one, change;
int quarter, dime, nickel, penny;
void foo();
Money() {}
};
原来问题是对象是通过Money mc;实例化的,变量没有初始化。
推荐的解决方案是添加以下构造函数:
Money::Money()
: amountP(), amountG(), totalChange(),
twenty(), ten(), five(), one(), change()
quarter(), dime(), nickel(), penny()
{
}
但是,这很丑陋且不便于维护。添加另一个成员变量并忘记将其添加到构造函数中的长列表很容易,当未初始化的变量偶然突然停止获取0 时,可能会导致几个月后难以发现的错误。
【问题讨论】:
-
@chris 如果没有用户定义的构造函数,这是个好主意,但如果该类还有一些其他要在构造时运行的代码,则可能会很尴尬
-
抱歉,直到刚才我才意识到这有多糟糕。
标签: c++ constructor initialization built-in-types