C++ Exception机制

C++异常机制的执行顺序。

在构造函数内抛出异常

/*
 * ExceptClass.h
 *
 *  Created on: 2018年1月2日
 *      Author: jacket
 */

#ifndef EXCEPTCLASS_H_
#define EXCEPTCLASS_H_

#include <iostream>

using std::cout;
using std::endl;

class ExceptClass {
public:
    ExceptClass(){
        cout<<"ExcepClass"<<endl;
        throw int(1);
    }
    void start(){
    }

    virtual ~ExceptClass() {
        cout<<"~ExcepClass"<<endl;
    }
};

#endif /* EXCEPTCLASS_H_ */
View Code

 

如果外部没有try catch,输出

ExcepClass
terminate called after throwing an instance of 'int'

如果外部try catch

ExcepClass
Catch

 

 

在start()内抛出异常

/*
 * ExceptClass.h
 *
 *  Created on: 2018年1月2日
 *      Author: jacket
 */

#ifndef EXCEPTCLASS_H_
#define EXCEPTCLASS_H_

#include <iostream>

using std::cout;
using std::endl;

class ExceptClass {
public:
    ExceptClass(){
        cout<<"ExcepClass"<<endl;
    }
    void start(){
        throw int(1);
    }

    virtual ~ExceptClass() {
        cout<<"~ExcepClass"<<endl;
    }
};

#endif /* EXCEPTCLASS_H_ */
View Code

 

如果外部没有try catch

 

ExcepClass

terminate called after throwing an instance of 'int'

 

如果外部try catch

ExcepClass
~ExcepClass
Catch

 

 所以,如果在构造函数内抛出异常,析构函数将不被调用。如果在其他函数内抛出异常,析构函数会被调用。

而且如果外部没有try catch不会调用析构函数,说明C++抛出异常后是先回退(好像是栈有关的回退),检测到异常会被捕捉才进入析构函数。

刚试了下有try catch但捕捉类型改为float,也不会进入析构函数。

 

 

 Exception机制还有有多注意点。在学习过程中参考了不少文章。

C++异常处理之abort()、异常机制、exception 类(从这里开始了解到)

C++异常(exception)第一篇--综合讲解(这个最有深度,很多注意点)

C++处理异常 try,catch,throw

知乎上看到一些人评价c++的exception很难用,想问一下大家写c++时怎么处理错误?(很多大神透露的经验,还要继续吃透)

深入理解C++异常(好像有深入的讲解,但我没细看)

C++自定义异常处理(其实没啥用,但是一开始不懂异常机制是什么,还以为要有啥规范)

C++ 标准库中的异常(在linux下试了下logic_error,segfault,确定是在构造logic_error时报错,没找原因直接继承exception自定义了)

 

转载于:https://www.cnblogs.com/Jacket-K/p/8178603.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值