作为任务的一部分,我将研究开发套件,该套件使用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/