C++ 沙盒异常(外部库和std::lib)
我看了。 正如他在8分钟30秒时所说,他们不使用异常,他们不能强迫第三方库关闭异常。因此,他们在这些库周围“设置沙箱” 我的问题是: 1. 当我的代码库在禁用异常的情况下运行时,使用异常对库进行“沙箱处理”的确切含义是什么?它是如何工作的?我该如何做?(平台(Win/Linux/Mac、控制台或手机)是否存在差异?)C++ 沙盒异常(外部库和std::lib),c++,exception,C++,Exception,我看了。 正如他在8分钟30秒时所说,他们不使用异常,他们不能强迫第三方库关闭异常。因此,他们在这些库周围“设置沙箱” 我的问题是: 1. 当我的代码库在禁用异常的情况下运行时,使用异常对库进行“沙箱处理”的确切含义是什么?它是如何工作的?我该如何做?(平台(Win/Linux/Mac、控制台或手机)是否存在差异?) 2。在使用标准库(使用异常,如new和类似项)时,我如何“沙箱”它们?还是与1中的原理相同?您可以通过将异常缓存在包装器中来沙箱异常。假设您有: 使用异常的第三方库T 您的应用程
2。在使用标准库(使用异常,如
new
和类似项)时,我如何“沙箱”它们?还是与1中的原理相同?您可以通过将异常缓存在包装器中来沙箱异常。假设您有:
- 使用异常的第三方库
T
- 您的应用程序
是一个不使用异常的
W
(在启用异常的情况下编译),该包装器将包装T
,但捕获所有存在的异常,例如,替换为和错误代码,如下所示:
// this one comes from the original library T that throws exceptions
void someFunctionInT();
// this will be your wrapper around the function above
int someFunctionInW()
{
try
{
someFunctionInT();
}
catch (...)
{
return -1;
}
return 0;
}
所以,通过这种方式,您的包装器W
不应该抛出任何异常,您可以对应用程序A
使用安全链接
显然,这只是一个简单的例子。但此时您可以做一件稍微“花哨”一点的事情,因为您已经为异常处理“付费”。例如,您可以测试异常并返回不同的错误代码,或者准备从另一个函数中检索错误消息,等等……这取决于您的创造力。:-)只需观看视频的其余部分,他接着解释了它们如何不使用普通堆,也就是说,没有
新的。是的,我知道,但我将使用标准库,而且并非所有std实现都支持禁用的异常