C++异常处理

C++异常处理

1.C++中异常处理的简介。

异常是程序执行过程中出现的一些非预期的情况,列入除零错误、空指针等。C++异常处理是通过try、catch、throw关键字提供了有一中结构化的、可维护的错误处理机制。

例如:

#include <iostream>
using namespace std;

int main()
{
    try
    {
        // 可能会抛出异常
        int nRtn = 10 / 0; // 除零错误
    }
    catch (const std::exception& e)
    {
        std::cerr << "Catch Excepyion" << e.what() << endl;
    }
    std::cout << "Hello World!\n";
}

上面代码运行时出现:error C2124: 被零除或对零求模。

2.C++中异常的层次结构。

在C++中异常是通过类表示的,我们也可以定义自己的异常类,建立更有异常层次的异常处理机制。

例如:

class CMyException :public exception
{
public:
    const char* what() const noexcept override
    {
        return "MyException Occurred";
    }
};
int main()
{
    try
    {
         可能会抛出异常
        //int nRtn = 10 / 0; // 除零错误
        throw CMyException();
    }
    catch (const std::exception& e)
    {
        std::cerr << "Catch Excepyion" << e.what() << endl;
    }
    std::cout << "Hello World!\n";
}

通过自定义异常类,你可以根据程序的需求建立更为灵活的异常处理结构。在捕获异常时,按照异常类的层次结构进行捕获,从而实现更精细的异常处理。

3.C++异常的抛出。

使用throw可以再程序的任何位置抛出异常,将控制流传递给最近的catch块。

例如:

void SomeFunction()
{
    //......
    if (errorCondition)
        throw std::runtime_error("Someting Rong");
    //......

}

int main()
{
    try
    {
         可能会抛出异常
        //int nRtn = 10 / 0; // 除零错误
        // throw CMyException();

        SomeFunction();
    }
    catch (const std::exception& e)
    {
        std::cerr << "Catch Excepyion" << e.what() << endl;
    }
    std::cout << "Hello World!\n";
}

通过在 someFunction 中抛出异常,我们可以在适当的时候中断程序的正常执行流程,转而执行异常处理代码。

4.RAII(资源获取即初始化)

RAII(Resource Acquisition Is Initialization) 是C++中一中广泛使用的编程范式,通过对象的生命周期来管理资源。在异常处理中,

RAII能够确保在异常发生时资源被正确的释放,避免内存泄漏和资源泄露。

例如:

class CFileHandler
{
public:
    CFileHandler(const char* pFileName)
    {
        m_pFile = fopen(pFileName,"r");
        if (!m_pFile)
            throw std::runtime_error("Open File Failed");
    }
    ~CFileHandler()
    {
        if (m_pFile)
            fclose(m_pFile);
    }

private:
    FILE* m_pFile;
};

int main()
{
    try
    {
         可能会抛出异常
        //int nRtn = 10 / 0; // 除零错误
        // throw CMyException();

        // SomeFunction();

        CFileHandler file("example.txt");

    }
    catch (const std::exception& e)
    {
        std::cerr << "Catch Excepyion" << e.what() << endl;
    }
    std::cout << "Hello World!\n";
}

该程序输出:微信截图_20231216125304

5.标准异常类

C++标准库提供了一组标准异常类,它们派生自 std::exception。这些异常类包括 std::runtime_error、std::logic_error等,提供了一些常用的异常类型,以便程序员更容易地理解和处理异常。

正如前面程序中的runtime_errore类的用法。

最后:异常处理是C++编程中的一项重要技能,合理而灵活地使用异常处理,将为你的程序增添一份强大的防护盾,确保其在各种情况下都能稳健运行。让你的C++代码更加健壮、可维护。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值