- 构造函数
- 只提供自动初始化成员变量的机会
- 不能保证初始化逻辑一定成功
- 执行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;
}