作为任务的一部分,我将研究开发套件,该套件使用C++类的“两阶段”构造:

// Include Header
class someFubar{
public:
    someFubar();
    bool Construction(void);
    ~someFubar();
private:
    fooObject _fooObj;
}

在源头
// someFubar.cpp
someFubar::someFubar : _fooObj(null){ }

bool
someFubar::Construction(void){
    bool rv = false;
    this->_fooObj = new fooObject();
    if (this->_fooObj != null) rv = true;
    return rv;
}

someFubar::~someFubar(){
    if (this->_fooObj != null) delete this->_fooObj;
}

为什么要使用“两阶段”,有什么好处?为什么不只是在实际构造函数中实例化对象初始化呢?

最佳答案

有关Two Phase Construction的文档。

想法是您不能从构造函数返回值来指示失败。指示构造函数故障的唯一方法是引发异常。这并不总是可取的,尤其是因为异常安全性是一个非常复杂的主题。

因此,在这种情况下,构造被拆分:一个不引发但也不完全初始化的构造函数,以及一个执行初始化并可以返回成功或失败指示而无需(不必)引发异常的函数。

关于c++ - C++中的两阶段构造,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3021572/

10-10 20:16