构造函数
只提供自动初始化成员变量的机会
不能保证初始化逻辑一定成功
执行return语句后构造函数立即结束
半成品对象的概念
初始化操作不能按照预期完成而得到的对象
半成品对象是合法的c++对象,也是Bug的重要来源
二阶构造示例一
class TwoPhaseCons {
private:
TwoPhaseCons() { //第一阶段构造函数
}
bool construct() { //第二阶段构造函数
return true;
}
public:
static TwoPhaseCons* NewInstance(); //对象创建函数
}
二阶构造示例二
TwoPhaseCons* TwoPhaseCons::NewInstance() {
TwoPhaseCons* ret = new TwoPhaseCons();
//若第二阶段构造失败,返回NULL
if( !( ret && ret->construct() ) ) {
delete ret;
ret = NULL;
}
return ret;
}
小结
构造函数只能决定对象的初始化状态
构造函数中初始化操作的失败不影响对象的诞生
初始化不完全的半成品对象是Bug的重要来源
二阶构造人为的将初始化过程分为两部分
二阶构造能够确保创建的对象都是完整初始化的