免责声明:这个问题完全是理论性的,充满了想象和梦想,所以需要读者自行判断:)
所以我在阅读有关异常对象的内容,并且在 IBM C++ 引用资料中读到:
In a function try block’s handler, you cannot have a jump into the body of a constructor or destructor.
我知道为什么不应该尝试跳回构造函数的 body ......等等等等......但我更好奇如果这不是可憎的,我怎么能跳回构造函数的 body body 。
- 使用
return
语句 goto
语句
或者作者正在使用另一种方法?
最佳答案
唯一和这个场景很接近的是Async/Await
Async-Await
关键字来自 C# 编程语言,可能是从 C++17 开始的标准的一部分。
Visual Studio 2015 RTM 已经支持这个极其重要的功能。
Async/Await
如下,如果 Z()
是一个异步函数,当这个流程发生时
X() 调用-> Y() 调用-> await Z()
Z()
将启动,代码流 跳回到 X()
而不会破坏 Y( )
和 Z()
。当 Z()
完成时,您可以异步跳回到
Y() calls-> await Z()
并返回 Z()
的结果,并从那里继续,因为该函数从未返回/销毁。
这是一个协程实现。
我为什么要说呢?因为您可以在构造函数中用 try/catch
block 包装异步函数的 iside。
C++17 示例:
struct ContentManager{
std::string m_data;
Awaitable<std::string> getDataFromTheNet(){/**/}
std::future<void> initializeData(){
try{
m_data = await getDataFromTheNet();
}catch(...){/* handle */}
}
ContentManager(){
initializeData();
}
};
在此示例中,您实际上从 try block 跳回到首先调用它的构造函数。
为什么不酷?
因为当ContentManager
构造完成后,作为开发人员的我认为对象被初始化了,但显然不是这样!
关于c++ - 我们如何从它的函数尝试处理程序跳回到构造函数主体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34417630/