Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.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++ 为异常设置空值\u ptr?_C++_Multithreading_C++11_Exception - Fatal编程技术网

C++ 为异常设置空值\u ptr?

C++ 为异常设置空值\u ptr?,c++,multithreading,c++11,exception,C++,Multithreading,C++11,Exception,我有一些类对象,我想在出现一些异常后重用它们。我的问题是关于使用exception\u ptr从其他线程传输的异常。例如,在开始操作(打算由对象的用户调用)之前,有几个函数会执行if(_wrkrExc)rethrow_exception(_wrkrExc)。我希望能够在抛出异常(强制用户处理异常)后重用该对象。重新抛出后,异常\u ptr是否为空,还是必须手动执行,以便下一个检查点不会再次抛出?如果是后者,处理它的好设计是什么?添加执行\u wrkrExc=nullptr的Clear()或Res

我有一些类对象,我想在出现一些异常后重用它们。我的问题是关于使用
exception\u ptr
从其他线程传输的异常。例如,在开始操作(打算由对象的用户调用)之前,有几个函数会执行
if(_wrkrExc)rethrow_exception(_wrkrExc)。我希望能够在抛出异常(强制用户处理异常)后重用该对象。重新抛出后,
异常\u ptr
是否为空,还是必须手动执行,以便下一个检查点不会再次抛出?如果是后者,处理它的好设计是什么?添加执行
\u wrkrExc=nullptr的
Clear()
Reset()
方法,在重用对象之前用户必须调用该代码,在我看来,它似乎是类API膨胀;或者,做下面这样的事情充其量也很难看:

try
{
    if (_wrkrExc) rethrow_exception(_wrkrExc);
}
catch (...)
{
    _wrkrExc = nullptr;
    throw;
}

那么有什么建议吗?

如果(_wrkrExc){auto exc=_wrkrExc;_wrkrExc=nullptr;rethrow_exception(exc);}
?这将保存额外的捕获和抛出。我尝试使用move()而不是copy来执行此操作,但原始异常没有被置为空(虽然swap()可以工作)。异常应通过值抛出并通过引用捕获,而不是作为指针。@EJP:
rethrow\u必须使用标准中指定的参数类型调用异常
,这是
std::exception\u ptr
。没有其他“应该”。