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
。没有其他“应该”。