二阶构造模式

    我们在创建对象的时候,需要调用构造函数,对对象做初始化,但是构造函数是没有返回值的,无法判断构造函数的执行结果。如果构造函数执行过程中,发生了异常,导致函数提前返回了,那么这种情况下,我们创建的对象会处于什么状态。

    1. 构造函数确定对对象做初始状态,对象的创建与构造函数无关,也就是说存储对象的那片内存已经完成分配

    2. 如果构造函数出现了异常,提前返回,就会导致对象的状态的不确定性,变成变成半成品对象

    因此,一般构造函数中是不允许有可能产生异常的代码,把可能产生异常的代码,放到第二阶段去完成,这就是二阶构造。

    

     如以下代码(直接写的没有进过编译测试):

class Test{
private:
Test(){
   array  = NULL;
}
bool construc(int length){
   array = new int[length];
   if(array == NULL ){
     return false;
   }
   return ture;
}
public:
int* array;
static Test* NewInstance(int length){
    Test* ret = new Test();
    if(! (ret && ret->construct(length))){
        delete ret;
        ret =  NULL;
    }
    return ret;
}

}

阅读更多

没有更多推荐了,返回首页