c++异常 连续抛出异常
今天天遇到这样一个问题,连续两次抛出异常,但是只有一个catch,会导致core这个时候会导致core,
单线程编程中可能很少遇到这样的问题,但是多线程中是很容易遇到的,
举个例子:catch代码在主线程M中,子线程C1抛出异常,如果引起子线程C2的终止,在C2终止的过程中也产生异常,那就出问题了。
下面贴一个测试案例
#include <iostream>
#include <string>
#include <boost/shared_ptr.hpp>
#include <exception>
class Exception
{
public:
Exception(const std::string& msg)
:_message(msg)
{
}
const std::string& what()
{
return _message ;
}
private:
std::string _message ;
};
class B {
public:
B()
{
_ch = new char('h') ;
std::cout << "B()" << std::endl;
}
~B()
{
delete _ch ;
std::cout << "~B()" << std::endl;
}
void visit()
{
std::cout << *_ch << ",first" << std::endl;
throw Exception("Exception - huangxiaowei");
std::cout << *_ch << ",second" << std::endl;
}
public:
char* _ch ;
}; class A {
public:
B b;
public:
A():
b()
{
std::cout << "A()" << std::endl;
}
~A()
{
std::cout << "~A()" << std::endl;
b.visit();
}
void get()
{
b.visit();
} }; int main() {
try
{
//boost::shared_ptr<A> spa(new A());
//spa->get();
A a ;
a.get();
}
catch(Exception& e)
{
std::cout << e.what() << std::endl;
}
}
这是一个很巧妙的例子
调用get的时候 B方法visit抛出异常,这个时候A要析构,又一次调用B的visit再次抛出异常,
导致程序core掉
这其中的原理没有深入研究
c++异常 连续抛出异常的更多相关文章
- Java 异常 重写抛出异常限制
1 子类在重写父类抛出异常的方法时,要么不抛出异常,要么抛出与父类方法相同的异常或该异常的子类.如果被重写的父类方法只抛出受检异常,则子类重写的方法可以抛出非受检异常.例如,父类方法抛出了一个受检异常 ...
- java异常——重新抛出异常
有时候希望把刚捕获的异常重新抛出,尤其是在使用Exception捕获所有异常的时候.既然已经得到了对当前异常对象的引用,可以直接把它重新抛出: catch(Exception e){ System.o ...
- python异常处理-异常捕获-抛出异常-断言-自定义异常-UDP通信-socketserver模块应用-3
异常捕获 异常:程序在运行过程中出现了不可预知的错误,并且该错误没有对应的处理机制,那么就会以异常的形式表现出来 影响:整个程序无法再正常运行 异常的结构 异常的类型 NameError 异常的信息 ...
- 表情存储异常--mybatis抛出异常(java.sql.SQLException: Incorrect string value: '\xF0\x9F\x92\x94' for column 'name' at row 1)
文章参考 https://blog.csdn.net/junsure2012/article/details/42171035 https://www.cnblogs.com/WangYunShuai ...
- Core Java 总结(异常类问题)
所有代码均在本地编译运行测试,环境为 Windows7 32位机器 + eclipse Mars.2 Release (4.5.2) 2016-10-17 整理 下面的代码输出结果是多少?为什么?并由 ...
- java中异常抛出后代码还会继续执行吗
今天遇到一个问题,在下面的代码中,当抛出运行时异常后,后面的代码还会执行吗,是否需要在异常后面加上return语句呢? public void add(int index, E element){ i ...
- Java异常之自定义异常
哎呀,妈呀,又出异常了!俗话说:"代码虐我千百遍,我待代码如初恋". 小Alan最近一直在忙着工作,已经很久没有写写东西来加深自己的理解了,今天来跟大家聊聊Java异常.Java异 ...
- python虚拟机中的异常流控制
异常:对程序运行中的非正常情况进行抽象.并且提供相应的语法结构和语义元素,使得程序员能够通过这些语法结构和语义元素来方便地描述异常发生时的行为. 1.Python中的异常机制: 1.1Python虚拟 ...
- java中异常抛出后代码是否会继续执行
为了回答这个问题,我编写了几段代码测试了一下,结果如下: 代码1:throw new Exception("参数越界"); System.out.println(" ...
随机推荐
- android 常用selector 颜色搭配(按钮、显示圆角等)
作为开发者,我们时常会遇到UI常用色调搭配不协调的情况,UI也只有一个白板原型图,这时我们有一套自己常用的好看的selector会很快调出自己想要的风格. 下面是我常用的一些色调,仅供大家参考: 蓝色 ...
- 图解Git/图形化的Git参考手册
此页图解git中的最常用命令.如果你稍微理解git的工作原理,这篇文章能够让你理解的更透彻. 基本用法 上面的四条命令在工作目录.暂存目录(也叫做索引)和仓库之间复制文件. ● git add fil ...
- iOS开发如何实现消息推送机制
一.关于推送通知 推送通知,也被叫做远程通知,是在iOS 3.0以后被引入的功能.是当程序没有启动或不在前台运行时,告诉用户有新消息的一种途径,是从外部服务器发送到应用程序上的.一般说来,当要显示消息 ...
- volatile关键字的使用
(简要概括:volatile变量有两个作用:一个是告诉编译器不要进行优化:另一个是告诉系统始终从内存中取变量的地址,而不是从缓存中取变量的值) 一.前言 1.编译器优化介绍: 由于内存访问速度远不及C ...
- URAL题解—不断跟新中
1014:简单题,忘了0的情况可以是10,== 1219:找呀找规律,满足N*(N-1)/2+1=X;就是1 的情况了
- 浅谈ASP.NET报表控件
OWC似乎使用者居多,但看见有网友在帖中抱怨OWC在使用时需要许可证书,于是将其排除,我可不想BOSS在看报表时弹出一个“没有许可证书”的窗口. 接着找到了ComponentOne的Web chart ...
- MySQL注入load_file常用路径
WINDOWS下: c:/boot.ini //查看系统版本 c:/windows/php.ini //php配置信息 c:/windows/my.ini //MYSQL配置文件,记录管理员登陆过的M ...
- LNMP笔记:安装 Xcache 缓存扩展,降低服务器负载
LNMP笔记:安装 Xcache 缓存扩展,降低服务器负载 2014/11/27 教程笔记 4,743 14 WordPress 精品主机推荐:恒创主机 | 阿里云(本站目前所用云主机) 倡萌 ...
- 解决Notice错误,性能竟然提升了1000多倍!
先说PHP的deprecated错误的性能问题 最近刚刚完成了一个项目,在测试完基本功能后,我们就发布到线上.结果上线不久就发现产生了大量的错误,如下图: 一看都是PHP的Deprecated错误,是 ...
- 03server平台delphi程序不支持直接调用webservice
经过多次测试和查证,发现03server平台用delphi7.0开发的应用程序就是不支持直接调用webservice,无论这个webservice是delphi开发的还是C#开发,抑或是java开发的 ...