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. }
  22. }

运行结果: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. }
  23. }

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. }
  22. }

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

C++异常传递三种不同方式介绍相关推荐

  1. 分布式锁简单入门以及三种实现方式介绍(滴滴)

    很多小伙伴在学习Java的时候,总是感觉Java多线程在实际的业务中很少使用,以至于不会花太多的时间去学习,技术债不断累积!等到了一定程度的时候对于与Java多线程相关的东西就很难理解,今天需要探讨的 ...

  2. 分布式锁简单入门以及三种实现方式介绍

    分布式锁简单入门以及三种实现方式介绍 2018年01月11日 21:16:28 徐刘根 阅读数:37912 标签: 分布式 分布式锁 高并发 更多 个人分类: 集群分布式 版权声明:本文为博主原创文章 ...

  3. 可网管交换机的三种管理方式介绍

    交换机的按是否可网管,分为可网管交换机和不可网管交换机,可网管交换机可以通过以下几种途径进行管理:通过RS-232串行口(或并行口)管理.通过网络浏览器管理和通过网络管理软件管理.接下来就由杭州飞畅科 ...

  4. 分布式锁简单入门以及三种实现方式介绍_徐刘根的博客-CSDN博客

    原文地址 rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/ck_htmled ...

  5. Apache HTTP Server 与 Tomcat 的三种连接方式介绍

    http://www.ibm.com/developerworks/cn/opensource/os-lo-apache-tomcat/ 首先我们先介绍一下为什么要让 Apache 与 Tomcat ...

  6. 数据库事务的三种提交方式介绍

    文章目录 数据库事务提交的三种方式: 为什么需要隐式提交: 通过不同的数据库来介绍自动提交和手动提交: 举例: 数据库事务提交的三种方式: 手动显式提交.隐式提交及自动提交. 参考:https://b ...

  7. android 三种定位方式 介绍

    三种获取手机的位置的方式_20 1.网络定位(network).前提是必须连上网络:wifi.3G.2G: 获取到IP地址 例如:传美版QQ,彩虹版QQ,珊瑚虫版QQ,就有一个功能显示对方的IP: 根 ...

  8. catch里面不想做任何处理_处理异常的三种健壮方式

    导读:请像冠军一样处理异常. Oh no, don't do this to me... 中文翻译: 哦,请不要这样写-- // 写一句注释跳过异常try {throw new IOException ...

  9. selenium的三种等待方式介绍及优缺点

    等待的作用 UI自动化中,运行的时候页面是需要有加载时间的. 等待作为ui自动化中极其核心的技术,是因为通过等待,才可以更好地保障自动化测试的稳定性. 三类等待机制 1.强制等待 就是time库下的s ...

最新文章

  1. UVa 941 Permutations
  2. 关于数据可视化页面制作
  3. 乔布斯诞辰64周年 库克发文纪念:我们每一天都怀念他
  4. 网易云课堂C++开发工程师案例-网吧收银系统(MFC+ADO) C++收银...
  5. 1.为什么要使用token,token是什么?
  6. 华中师范大学计算机专硕和学硕,学硕?专硕?该如何选
  7. 正则匹配手机号和座机号包括分机号
  8. 不想玩大数据的厨子都不是冒险家
  9. 25章 SPI—读写串行FLASH
  10. 直接建内网穿透服务器替换TeamViewer和向日葵可以实现远程操控
  11. 芯片史称:“长平之战”----Intel的东进与ARM的西征(3)--人生如戏,全靠演技
  12. Vue的v-if和v-show的区别(含图示)
  13. 教你做超惊艳的南丁格尔玫瑰图
  14. JS计算今年过了多少天
  15. 如何简单形象又有趣地讲解神经网络是什么?(知乎) 说的人很多,理解很充分
  16. 利用邮件合并,每人一份信息表
  17. 04-查询窗口的使用
  18. ​贾跃亭回应是否有回国打算;马斯克称大部分痛苦来自特斯拉;JavaScript蝉联最受欢迎编程语言 | EA周报...
  19. Final Cut Pro X v10.6.1(fcpx视频剪辑) 中文版已发布,支持M1intel处理器,支持monterey最新系统,功能介绍
  20. Similarity and Matching of Neural Network Representations 论文阅读笔记

热门文章

  1. android 记录触屏坐标,android 屏幕坐标总结
  2. 求最大公约数和最小公倍数的多种方法
  3. SmartUpload综合
  4. win10更新不支持uefi固件的磁盘布局
  5. 前端:LayUi监听表格单元格,编辑后恢复原数据
  6. Linux下rsync安装与配置
  7. 获取两个向量中间位置的点
  8. Ruby读取Excel文件的两种方法
  9. PDPS教程:机器人气动点焊焊枪大开与小开运动状态自动切换设置
  10. 小米9 MIUI12.5 红米 K40s MIUI13.0.10 安装谷歌框架