Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 沙盒异常(外部库和std::lib)_C++_Exception - Fatal编程技术网

C++ 沙盒异常(外部库和std::lib)

C++ 沙盒异常(外部库和std::lib),c++,exception,C++,Exception,我看了。 正如他在8分钟30秒时所说,他们不使用异常,他们不能强迫第三方库关闭异常。因此,他们在这些库周围“设置沙箱” 我的问题是: 1. 当我的代码库在禁用异常的情况下运行时,使用异常对库进行“沙箱处理”的确切含义是什么?它是如何工作的?我该如何做?(平台(Win/Linux/Mac、控制台或手机)是否存在差异?) 2。在使用标准库(使用异常,如new和类似项)时,我如何“沙箱”它们?还是与1中的原理相同?您可以通过将异常缓存在包装器中来沙箱异常。假设您有: 使用异常的第三方库T 您的应用程

我看了。 正如他在8分钟30秒时所说,他们不使用异常,他们不能强迫第三方库关闭异常。因此,他们在这些库周围“设置沙箱”

我的问题是:

1. 当我的代码库在禁用异常的情况下运行时,使用异常对库进行“沙箱处理”的确切含义是什么?它是如何工作的?我该如何做?(平台(Win/Linux/Mac、控制台或手机)是否存在差异?)


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实现都支持禁用的异常