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;
}
相关推荐
FuLLovers25 分钟前
2024-09-13 冯诺依曼体系结构 OS管理 进程
linux·开发语言
everyStudy1 小时前
JS中判断字符串中是否包含指定字符
开发语言·前端·javascript
luthane1 小时前
python 实现average mean平均数算法
开发语言·python·算法
Ylucius2 小时前
动态语言? 静态语言? ------区别何在?java,js,c,c++,python分给是静态or动态语言?
java·c语言·javascript·c++·python·学习
凡人的AI工具箱2 小时前
AI教你学Python 第11天 : 局部变量与全局变量
开发语言·人工智能·后端·python
sleP4o2 小时前
Python操作MySQL
开发语言·python·mysql
是店小二呀2 小时前
【C++】C++ STL探索:Priority Queue与仿函数的深入解析
开发语言·c++·后端
洛寒瑜2 小时前
【读书笔记-《30天自制操作系统》-23】Day24
开发语言·汇编·笔记·操作系统·应用程序
ephemerals__2 小时前
【c++】动态内存管理
开发语言·c++
咩咩觉主2 小时前
en造数据结构与算法C# 群组行为优化 和 头鸟控制
开发语言·c#