二阶构造模式


 

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;
}

 

posted @ 2018-07-09 10:48  99度的水  阅读(232)  评论(0编辑  收藏  举报