在try-catch语句中的try块和所有catch时钟的末尾执行相同的操作
Do the same action at the end of the try block and all catch clocks in a try-catch statement
这是避免代码重复的一种方法吗(在所有catch
块和try
块中调用FinalAction
函数)?
try
{
// some actions including creation of new objects
FinalAction();
}
catch (const Exception1& ex1)
{
ProcessException1(ex1);
FinalAction();
}
catch (const Exception2& ex2)
{
ProcessException2(ex2);
FinalAction();
}
// ...
catch (const ExceptionN& exN)
{
ProcessExceptionN(exN);
FinalAction();
}
catch (...)
{
ProcessUnknownException();
FinalAction();
}
更新:FinalAction()
应在try
块中创建的对象的析构函数之前调用。所以像下面这样简单的解决方案在这里不起作用。
try
{
// some actions including creation of new objects
}
catch (const Exception1& ex1)
{
ProcessException1(ex1);
}
catch (const Exception2& ex2)
{
ProcessException2(ex2);
}
// ...
catch (const ExceptionN& exN)
{
ProcessExceptionN(exN);
}
catch (...)
{
ProcessUnknownException();
}
FinalAction();
关于FinalAction
的更多信息:它不抛出,也不清理try
块中分配的任何资源。
虽然你的问题不是完全重复的,但这个问题的答案是合适的。
你似乎一直在问的是C++中finally
-子句的等价物,而答案是在C++中,这通常通过RAII来解决。
我不会重复在链接SO问题中给出的相当广泛的答案,但总的来说,你要确保资源的清理是在析构函数中完成的。很可能是您的FinalAction()
正在清理资源。
我不知道ProcessExceptionX和FinalAction属于哪个类,也不知道ProcessException做什么,但也许你只能有一个ProcessException来获取参数并执行FinalAction,例如:
...
try {
FinalAction();
}
catch (const Exception1& ex1) {
ProcessException(ex1);
}
...
void ProcessException (Exception e) {
// do things
FinalAction();
}
最简单的方法就是在try
块之后调用它。
bool success = false;
try
{
// some actions including creation of new objects
FinalAction();
success = true;
}
catch (const Exception1& ex1)
{
ProcessException1(ex1);
}
if (!success)
FinalAction();
然而,这样做而不是使用类来管理您正在使用FinalAction
清理的任何资源是非常可疑的。
相关文章:
- 在执行其他功能的同时播放动画(LED矩阵和Arduino/ESP8266)
- 在C++/Linux中设置单调时钟的一些技巧
- C++,系统无法执行指定的程序
- 使用C++中的模板和运算符重载执行矩阵运算
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 执行函数时导致崩溃的变量
- 无论条件是否为true,if总是在c++中执行
- 当函数模板参数是具有默认参数的类模板时,函数模板参数的推导如何执行
- 在C++中对T*类型执行std::move的意外行为
- 使用QProcess执行命令,并将结果存储在QStringList中
- 如何在没有信号的情况下从C++执行QML插槽
- 从文本文件中读取时钟时间和事件时间并进行处理
- 如何确认我的constexpr表达式实际上已经在编译时执行
- C++17中的并行执行策略
- QML按钮点击功能执行顺序
- C++ 实现时钟来测量执行时间
- 二叉搜索真的是在 0 时钟 CPU 时间内执行的吗?
- 在try-catch语句中的try块和所有catch时钟的末尾执行相同的操作
- 在特定的时钟时间执行功能
- 在linux中,与动态调用相关的时钟周期中程序的意外执行时间