`

c++ - exception catch all handler

    博客分类:
  • c++
c++ 
阅读更多

this is a code that shows how you do the catch all exception handler in C++; it may sound platitude, but C++ lacks of the type system which dictate that all the excpetion should derive from the Exception base class so to catch all exception , no matter which type it is (may it be an primitive type, a string, or an exception derived class or even a  custom class) you can catch and handle it also, there is no such finally keyword that can do some resource release work, so it is adviced that you can use the catch all and do the proper deallocation there. 

 

below is the fake/mock code that show an typical resource class.

 

class resource
{
public:
	void lock() ;
	void releaes();
};


void resource::lock() { }
void resource::releaes() { }
 

and follow is the code that uses the catch all exception handlers as follow.

 

void catchCallHandler() 
{
	  resource res;
	  res.lock();
	  try 
	  {

	  // use res
	  // some action that causes an exception to be thrown
	  res.releaes();
	  }
	  catch (...)  // ... the tree dots are refered as the ellipsis, which is quite often used in many a place. 
	  {
		  res.releaes();
		  throw; // and you can rethrow the exception after you do the proper deallocation of the resources
		         // or you can opt not rethrow, but you can just return if the handler have handled the exception safely
	  }

	  res.releaes();
}
 

however, though we have the way to use the catch all handlers, we have a better way in C++;

 

though we discussed the catch (...) expression , it is not the only way of recover from the exception site, a better way and a more native way is to use the C++'s resource initialization is the resource aquisition paradigm/paragon. whereas the destructor which exit the function Will take responsibility of cleaning up the resource.



we will come back to the initialization resource aquisition later .

 

 

分享到:
评论

相关推荐

    C++异常处理技巧try/catch/throw/finally/exception

    通过合理地使用`try`、`catch`、`throw`和`exception`等关键字,开发者不仅能够编写更加可靠的代码,还能显著提升程序的可维护性和可读性。 #### 二、C++标准异常处理 ##### 1. 构造和析构中的异常抛出 在C++中,...

    iOS , mac signal exception catch

    "signal exception catch"是指程序在运行过程中遇到特定的信号(如SIGSEGV、SIGABRT等)时,能够优雅地处理这些异常,而不是直接崩溃。下面将详细介绍这一主题。 1. **信号(Signal)基础**: - 在Unix-like系统,...

    c++ try catch.doc

    __except(EXCEPTION_EXECUTE_HANDLER) { AfxMessageBox("caught"); } ``` - 这种方法虽然有效,但其不是C++标准的一部分,仅适用于Windows平台。 2. **编译器选项调整** - 为了保持代码的跨平台兼容性,可以...

    C++的try块与异常处理及调试技术实例解析

    本文以示例形式简述了C++ try块的异常处理与...handler-statement; }catch(exception-specifier) { handler-statement; } 二、此处需要注意: 1.一旦catch子句执行结束,程序流程立即继续执行紧随着最后一个catch子

    C++异常和SEH的区别

    对于C++开发者来说,理解两种主要的异常处理方式——C++标准异常处理机制(`try-catch`)与特定于Windows平台的结构化异常处理(Structured Exception Handling, SEH)——之间的区别尤为重要。本文将深入探讨这两种...

    C++ C++课件 C++教程7

    这个过程称为“查找异常处理程序”(search for exception handler)。如果找到了匹配的`catch`块,异常处理程序会执行,并在处理完成后恢复程序的执行。如果在整个堆栈中都没有找到合适的处理程序,程序将终止,并...

    Visual C/C++的异常处理

    Visual C/C++ 提供了多种方式来处理异常,包括标准 C 语言异常处理、C++ 异常处理、Microsoft 基础类 (MFC) 异常处理以及微软特有的结构化异常处理 (Structured Exception Handling, SEH)。 #### 二、C 语言异常...

    运动会分数统计 C++

    C++的异常处理主要包括以下关键概念:try、catch、throw 和 finally。 ### 文件eh.h详解 #### 文件头部注释 文件头部给出了版权信息以及文件的目的描述,表明这是一个供C++使用的异常处理用户包含文件。该文件...

    C++ 各种异常处理机制 演示代码

    本文将深入探讨C++中的标准异常处理(Standard Exception Handling, SEH)以及在Visual Studio(VS)环境下特有的Windows结构化异常处理(Structured Exception Handling, SEH),并提供相关的演示代码。 首先,...

    C++常用术语

    C++提供了try-catch-finally语句来处理异常,以确保程序的健壮性和可靠性。 #### 27. 表达式(Expression) 表达式是由变量、常量、运算符和函数调用组成的计算单元。在C++中,表达式可以产生一个值,也可以执行...

    EurekaLog_7.5.0.0_Enterprise

    28)..Fixed: Irnored exceptions (via per-exception/events) now bring up default RTL handler 29)..Fixed: Format error in Viewer 30)..Fixed: Leak of EurekaLog exception information object 31)..Fixed: ...

    C与C++中的异常处理

    __except(EXCEPTION_EXECUTE_HANDLER) { // 处理异常 } } ``` #### 3. 标准C++异常处理的基本语法和语义 C++引入了一种更为强大的异常处理机制,它不仅提供了更加灵活的控制流,而且还支持异常的安全传播和资源...

    Html5 WebSocket c++实例

    } catch (const std::exception& e) { std::cerr () ; } return 0; } ``` 压缩包中的文件“7903df16cd894ce1ad3f8c7bb87001b8”很可能包含了这个实例的完整源代码,包括客户端HTML文件和C++服务端代码。为了...

    FlexGraphics_V_1.79_D4-XE10.2_Downloadly.ir

    - ADD: Add TFlexPanel.InvalidateControl virtual method which calls from TFlexControl.Invalidate and can be overriden (it is possible now to catch all object invalidation calls). - FIX: The TFlexPanel....

    Win32 结构化异常处理(SEH)探秘--相关代码

    SEH基于一个链表结构,称为异常处理表(Exception Handler Chain)。每当函数被调用时,都会将一个新的异常处理程序(称为"过滤器")添加到链表中。当异常发生时,系统会从当前执行上下文的异常处理表开始,按照链表...

    在vc中实现应用程序的异常截获

    return EXCEPTION_EXECUTE_HANDLER; // 指示应执行异常处理程序 } int main() { SetUnhandledExceptionFilter(MyUnhandledExceptionFilter); // 其他代码... } ``` `MyUnhandledExceptionFilter`是一个长整型...

    SAX2方法读取XML文件

    cerr << "XML Exception: " () ; } catch (const IOException& e) { cerr () ; } delete parser; return 0; } ``` 在这个例子中,`MyHandler`类需要根据实际需求实现对XML元素的处理逻辑。`parse`方法会...

    websocketpp客户端wss连接源码

    sudo apt-get install libboost-all-dev libssl-dev ``` 2. **获取WebSocketpp库** 你可以从GitHub仓库克隆WebSocketpp库: ``` git clone https://github.com/zaphoyd/websocketpp.git ``` 3. **创建客户端...

    全局异常处理的实现

    在Node.js环境中,可以使用`process.on('uncaughtException', handler)`监听未捕获的异常。在浏览器环境中,可以监听`window.onerror`事件来捕获脚本错误。对于异步操作,可以使用Promise的全局错误处理器`window....

Global site tag (gtag.js) - Google Analytics