C++异常使用

异常关键字:

try:在try部可检测异常

catch:当发现异常捕获处

throw:抛出异常处

noexcept:被修饰函数内部不会发生异常

允许抛出和捕捉各种类型的数据。

cpp 复制代码
int main()
{
    try{
        func();
    }
    catch(const char*e){ //捕捉字符串异常信息
        cout<<e<<endl;
    }
    catch(int g_val){    //捕捉整型异常信息
        cout<<g_val<<endl;
    }    
    catch(vector<int> v){//捕捉自定义异常信息
        cout<<v.front()<<endl;
    }

}

如果没有异常信息没有被catch匹配,就会返回到上级继续匹配。

上级存在匹配,就执行步骤后的代码,func1捕捉异常,从func1开始执行。

如果一直找没有匹配到,直到main函数栈帧也没有被捕捉就会报错

为了防止我们抛出的异常报错,一般都是在异常捕捉最后处使用捕捉任意异常的。

cpp 复制代码
try 
{
    func1();
    func2();
}
catch(int ){}
catch(float){}
catch(...){}//防止进程退出的最后防线

catch(...){}放到捕捉异常的最后,在前面的catch都异常不匹配的情况下,最后三个点可以捕捉任意的异常。

异常再次抛出。

异常允许多次抛出的。

cpp 复制代码
void func2()
{
    throw "异常信息";
}

void func1()
{
    try
    {
        func2();
    }
    catch(const char*ptr )
    {
        throw ptr;
        //throw; 得异常到什么抛什么异常
    }
    catch(...)
    {
        throw;
    }

一般用来堆空间开辟还未析构却抛异常的紧急处理

cpp 复制代码
void func()
{
    int*ptr=new int[10];
    try{
        func();//可能会出现异常的地方
    }
    catch(...)
    {
        delete[] ptr;//如果出现异常将堆申请空间在这里释放,否则内存泄露
        throw;//异常再次抛出
    }
    //其他工作
    delete[] ptr;
}
相关推荐
LitchiCheng几秒前
Mujoco 蒙特卡洛采样统计机械臂可达工作空间(非Matlab)
开发语言·matlab
真正的醒悟1 分钟前
图解网络8
开发语言·网络·php
或许好运来2 分钟前
【小结】近期遇到的问题和解决方案
c++
郝学胜-神的一滴6 分钟前
Linux信号集操作函数详解
linux·服务器·开发语言·c++·程序人生
咨询QQ688238866 分钟前
开关磁阻电机控制仿真:Matlab 2016b的探索之旅
c++
落霞的思绪9 分钟前
基于Go开发的矢量瓦片服务器——pg_tileserv
开发语言·后端·golang
喜欢吃燃面11 分钟前
算法竞赛之排序算法
c++·学习·算法
CHANG_THE_WORLD12 分钟前
Python 文件操作详解与代码示例
开发语言·数据库·python
大大da怪i18 分钟前
GPU编程之warp级编程
c++·gpu算力
我发在否18 分钟前
C++ > 牛客OJ在线编程常见输入输出练习场
c++·acm·牛客