ICode9

精准搜索请尝试: 精确搜索

C++ 二阶构造模式

2019-10-14 23:54:20??阅读:11??来源: 互联网

标签:int?构造?二阶?对象?bool?C++?Test?构造函数


1、如何判断构造函数的执行结果?

  构造函数没有返回值,所以不能通过返回值来判断是构造函数是否构造成功。

  如果给构造函数强行加入一个返回值,用来表示是否构造成功。这样确实能够反映出构造的结果,但是不够优雅,有点呆。

2、在构造函数中执return 会发生什么?

  当构造函数中执行return后构造函数直接返回,后面的程序将不能被执行到。这样将产生一个“半成品对象”。

3、构造函数执行结束是否意味着对象构造成功?

  如果构造函数中具备申请内存的操作,那么申请内存的操作不可能百分之百成功,所以构造函数执行结束并不意味着构造成功。而声明的对象变成了“半成品对象”

?

综上所述:

cc彩球网cc国际总代理  构造函数只能够提供一个自动初始化变量的机会,不能保证初始化逻辑一定成功,执行return语句后构造函数立即结束。(构造函数能够决定的只是对象的初始状态,而不是对象的诞生。)

?

关于“半成品对象”的概念:

  初始化操作不能按照预期的效果完成而得到对象。

  半成品对象是合法的C++对象。

?

二阶构造模式:

  所谓二阶构造模式,只是将构造分为两个阶段。

  一个阶段为资源无关的初始化操作(例如赋值等不需要访问到系统资源的相关操作。)

  第二阶段为与系统资源有关的操作(如申请内存,访问文件)。

   

?

?

?

二阶构造实验: 

 

#include 

class Test
{
    private:
        int *pData;
        int lenght;
        Test(int pDataLenght);//第一阶段构造函数
        bool construct()    ;//第二阶段构造函数        
    public:
        static Test* newInstance(int pDataLenght);//对象创建    
        bool steData(int pDataTab,int val);//设置参数
        bool getData(int pDataTab,int& pDataOut);//获取参数
        ~Test();
};

Test::Test(int pDataLenght)
{
    lenght = pDataLenght;
}

Test::~Test()
{
    delete[] pData;//释放堆空间内存。
    printf("this is Structure analysis function\n");//构析函数
    
}


bool Test::construct()
{
    bool ret = true;
    pData  = new int(lenght);
    if(pData)
    for(int i=0;iconstruct()))
        {
            delete ret;
            ret = NULL;
        }
    return ret;
}


bool Test::steData(int pDataTab,int val)
{
    bool ret = true;
    if(pDataTab>=0 && pDataTab=0 && pDataTabsteData(0, 10);
    for(int i  = 0 ;i<5 ;i++)
        {
            int temp;
            if(obj->getData(i,temp))
                printf("%d = %d\n",i,temp);
        }
    delete obj;
    return 0;
}

运行结果:

0 = 10
1 = 0
2 = 0
3 = 0
4 = 0
this is Structure analysis function

?



标签:int,构造,二阶,对象,bool,C++,Test,构造函数

专注分享技术,共同学习,共同进步。侵权联系[admin#icode9.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有