Two phase Construction in C++(C++ 中的两阶段构造)
问题描述
作为任务的一部分,我有研究使用 C++ 类的两阶段"构造的开发工具包:
I have as part of assignment to look into a development kit that uses the "two-phase" construction for C++ classes:
// 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;
}
为什么要使用这种两阶段",有什么好处?为什么不在实际的构造函数中实例化对象初始化?
Why would this "two-phase" be used and what benefits are there? Why not just instantiate the object initialization within the actual constructor?
推荐答案
关于两期建设.
这个想法是你不能从构造函数返回一个值来指示失败.指示构造函数失败的唯一方法是抛出异常.这并不总是可取的,尤其是因为异常安全是一个非常复杂的主题.
The idea is that you cannot return a value from a constructor to indicate failure. The only way to indicate constructor failure is to throw an exception. This is not always desirable, not least because exception safety is a very complex topic.
因此,在这种情况下,构造被拆分:一个不抛出但也不完全初始化的构造函数,以及一个执行初始化并可以返回成功或失败指示而不会(必然)抛出异常的函数.
So in this case the construction is split up: a constructor that does not throw, but also does not fully initialize, and a function that does the initialization and can return an indication of success or failure without (necessarily) throwing exceptions.
这篇关于C++ 中的两阶段构造的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:C++ 中的两阶段构造
基础教程推荐
- 随机插入/删除的综合向量与链表基准 2022-01-01
- 如何更改 SysDateTimePick32 或 CDateTimeCtrl 的背景颜色? 2022-01-01
- 为什么我们不能使用“虚拟继承"?在 COM 中? 2022-01-01
- 如何部分禁用 cmake C/C++ 自定义编译器检查 2021-01-01
- 将不可复制的闭包对象传递给 std::function 参数 2021-01-01
- c++ STL设置差异 2022-01-01
- 与 CAS 的原子交换(使用 gcc 同步内置函数) 2022-01-01
- C++:获取传递给函数的多维数组的行大小 2021-01-01
- 如何在 C++ 中正确使用命名空间? 2022-01-01
- 提升 ASIO 流缓冲 2021-01-01
