C++中的二阶构造模式

1 C++中的二阶构造模式

1.1 半成品对象

首先回顾下构造函数:

  • 类的构造函数用于对象的初始化。
  • 构造函数与类同名并且没有返回值。
  • 构造函数在对象定义时自动被调用。

思考如下几个问题:

  1. 如何判断构造函数的执行结果?
  2. 在构造函数中执行return语句会发生什么?
  3. 构造函数执行结束是否意味着对象构造成功?

实际上的构造函数:

  • 只提供自动初始化成员变量的机会。
  • 不能保证初始化逻辑一定成功。
  • 执行return语句后构造函数立即结束。

构造函数只能决定对象的初始化状态,构造函数中初始化操作的失败不影响对象的诞生!

半成品对象的概念:

  • 初始化操作不能按照预期完成而得到的对象。
  • 半成品对象是合法的C++对象,也是Bug的重要来源。

1.2 二阶构造

工程开发中的构造过程可分为:

  • 资源无关的初始化操作,不可能出现异常情况的操作。
  • 需要使用系统资源的操作,可能出现异常情况,如:内存申请、访问文件。

二阶构造人为的将初始化过程分为两部分,二阶构造能够确保创建的对象都是完整初始化的。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
示例代码:

#include <stdio.h>

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


int main()
{
    TwoPhaseCons* obj = TwoPhaseCons::NewInstance();
    
    printf("obj = %p\n", obj);

    delete obj;
    
    return 0;
}


参考资料:

  1. C++深度解析教程
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值