重庆分公司,新征程启航

为企业提供网站建设、域名注册、服务器等服务

C++--二阶构造模式-创新互联

A.关于构造函数
1.类的构造函数用于对象的初始化
2.构造函数与类同名并且没有返回值
3.构造函数在对象定义时被自动被调用
Q.问题的出现
1.如何判断构造函数的执行结果?
2.在构造函数中执行return语句会发生什么?
3.构造函数执行结束是否意味着对象构造成功?
代码示例

创新互联公司成立于2013年,是专业互联网技术服务公司,拥有项目成都网站制作、成都网站设计网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元丽江做网站,已为上家服务,为丽江各地企业和个人服务,联系电话:13518219792
#include 
using namespace std;

class Test
{
    int mi;
    int mj;
public:
    Test(int i, int j) 
    {
        mi = i;       
        mj = j       
    }
    int getI()
    {
        return mi;
    }
    int getJ()
    {
        return mj;
    }
};

int main()
{  
    Test t1(1, 2);

    cout<<"t1.getI()="<
可知当没在构造函数添加return返回值时,函数的运行结果是符合预期的,初始化逻辑成功了
当在构造函数添加return时
改动的过程运行的结果如图所示
C++--二阶构造模式C++--二阶构造模式
由这次的运行结果我们可以知道,在添加return之后,打印的t1.getJ()的值为随机值,初始化失败了,由此可以推测执行到return语句后构造函数结束了
由此可以对之前提出的问题进行了解答
1.构造函数只提供自动初始化成员变量的机会
2.构造函数不能保证初始化逻辑一定成功
3.构造函数执行return语句后构造函数立即结束

半成品对象
半成品对象的概念:初始化操作不能按照预期完成而得到的对象,半成品对象时合法的C++对象,也是Bug的重要来源
二阶构造
工程开发中的构造过程可以分为
1.资源无关的初始化操作--不可能出现异常情况的操作
2.需要使用系统资源的操作--可能出现的异常情况,如:内存申请,访问文件
C++--二阶构造模式

#include 
using namespace std;

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();

    cout<<"obj="<

运行结果如图所示
C++--二阶构造模式
小结:
1.构造函数只能决定对象的初始化状态
2.构造函数中初始化操作的失败不影响对象的诞生
3.初始化不完全的半成品对象是Bug的重要来源
4.二阶构造人为的将初始化过程分为两部分
5.二阶构造能够确保创建的对象都是完整初始化的

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


网站栏目:C++--二阶构造模式-创新互联
网站链接:http://cqcxhl.cn/article/heeij.html