C++异常传递三种不同方式介绍

开发 后端
在C++异常传递中,有三种不同的方式,分别为传值;传引用以及传指针。我们将会在这篇文章中为大家详细介绍一下相关内容。

C++编程语言中同样存在异常的相关操作。我们可以使用throw来解决异常处理。那么今天我们将会针对这一方面的知识重点介绍一下C++异常传递的相关方法,希望能够给大家带来一些帮助。

C++异常传递之1.传值(by value)

传值的过程中会产生临时对象的拷贝,不能解决多态的问题,如下:myexception继承exception,但是但确无法被正确的调用myexception的方法,造成对异常对象的切割。

  1. class myexception:public exception{  
  2. public:  
  3. virtual const char* what() throw();  
  4. };  
  5. const char* myexception::what(){  
  6. return "myException";  
  7. }  
  8. class A{  
  9. public:  
  10. A(){}  
  11. void f() throw(){  
  12. throw myexception();  
  13. }  
  14. };  
  15. int main(){  
  16. A a;  
  17. try{  
  18. a.f();  
  19. }catch(exception exc){  
  20. cout<<exc.what();  
  21. }  

运行结果:UnKnown exceptions

程序执行是会调用exception的what方法,而不是myexception的what方法。

C++异常传递之2.传指针(by pointer)

指针可以实现多态,但往往会将临时对象的地址作为指针传出去,出现悬挂指针错误。如果在堆上分配内存空间,又往往不知道何时删除对象,出现to be or not to be的错误。

结果显示:myException

  1. class myexception:public exception{  
  2. public:  
  3. virtual const char * what() const;  
  4. };  
  5. const char* myexception::what() const{  
  6. return "myException";  
  7. }  
  8. class A{  
  9. public:  
  10. A(){}  
  11. void f() throw(){  
  12. throw new myexception();  
  13. }  
  14. };  
  15. int main(){  
  16. A a;  
  17. try{  
  18. a.f();  
  19. }catch(exception* pexc){  
  20. cout<<pexc->what();  
  21. delete pexc;  
  22. }  

C++异常传递之3.传引用(by reference)

传引用是***的方法,可以克服前面的两个问题。

程序结果显示:myException

  1. class myexception:public exception{  
  2. public:  
  3. virtual const char * what() const;  
  4. };  
  5. const char* myexception::what() const{  
  6. return "myException";  
  7. }  
  8. class A{  
  9. public:  
  10. A(){}  
  11. void f() throw(){  
  12. throw myexception();  
  13. }  
  14. };  
  15. int main(){  
  16. A a;  
  17. try{  
  18. a.f();  
  19. }catch(exception& exc){  
  20. cout<<exc.what();  
  21. }  

以上就是对C++异常传递的相关介绍。

【编辑推荐】

  1. C++多线程代码范例剖析
  2. C++获得系统时间不同方案介绍
  3. C++静态成员函数基本概念讲解
  4. C++静态数据成员定义及应用浅谈
  5. C++指针重载应用代码解读
责任编辑:曹凯 来源: 博客园
相关推荐

2010-03-01 15:21:57

WCF死锁

2010-02-03 15:46:15

C++函数传递

2009-08-06 15:26:18

C#异常类型

2010-02-04 15:41:10

C++内存管理

2009-08-20 17:30:02

C#连接字符串

2010-02-04 10:13:35

C++获得系统时间

2010-02-05 10:30:02

C++操作符重载

2010-02-04 14:29:45

C++ typenam

2018-12-01 09:15:47

物联网设备物联网IOT

2010-02-26 13:34:50

WCF编码机制

2009-08-26 17:21:05

C# using

2019-12-09 10:30:42

Windows 10帐户Windows

2015-07-08 16:07:19

iOSObjective-C

2023-08-02 10:10:00

C#C++

2011-07-22 17:22:20

Spring

2012-07-17 09:16:16

SpringSSH

2010-02-23 14:24:50

WCF状态保存

2010-02-03 15:27:26

C++ static

2010-02-06 14:12:54

C++继承方式

2009-08-04 09:09:56

Java常见异常
点赞
收藏

51CTO技术栈公众号