1. 构造函数
① 类的构造函数用于对象的初始化
② 构造函数与类同名并且没有返回值
③ 构造函数在对象定义时自动被调用
2. 一些问题
① 如何判断构造函数的执行结构?
② 在构造函数中执行return语句会发生什么?
③ 构造函数执行结束是否意味着对象构造成功?
3. 真相
① 构造函数只提供自动化成员变量的机会
② 构造函数不能保证初始化逻辑一定成功
③ 执行return语句后构造函数立即结束
4. 结论:构造函数能决定的只是对象的初始状态,而不是对象的诞生。(有可能造成半成品对象)
5. 半成品对象
① 初始化操作不能按预期完成而得到的对象
② 半成品对象是合法的C++对象,也是Bug的重要来源(和野指针一样重要)
6. 工程开发中的构造过程可分为
① 资源无关的初始化操作:不可能出现异常情况的操作
② 需要使用系统资源的操作:可能出现异常的情况,如内存申请,访问文件,系统调用等
7. 二阶构造流程图
8. 二阶构造关键代码
class TwoPhaseCons
{
private:
TwoPhaseCons()
{
//第一阶段构造函数
}
bool construct()
{
//第二阶段构造函数
}
public:
static TwoPhaseCons* NewInstance();
};
TwoPhaseCons* TwoPhaseCons::NewInstance()
{
TwoPhaseCons* ret = new TwoPhaseCons;
if(!(ret != NULL && (ret->construct)))
{
delete ret;
ret = NULL;
}
return ret;
}