`

c++异常

    博客分类:
  • c++
阅读更多
c++的异常要比java的麻烦一点...
1.通常情况下,应该在异常处理器中使用引用参数而不是值参数,以防异常对象所包含的信息被切割掉,"..."能捕获任何异常一般放在最后,从而避免架空它后面的异常处理器。
2.异常是在运行时而不是在编译时被检测的,因此,编译时存在的大量信息在处理异常的时候是不存在的
3.如果没有任何一个层次的异常处理器能够捕获某种异常,一个特殊的库函数(terminate())会被自动调用让程序执行异常而退出,全局对象和静态对象的函数不会执行。
4.如果一个对象的构造在执行过程中抛出异常,那么析构函数就不会被调用,一般不要在析构函数里抛出异常
#include<iostream>
#include<vector>
#include<stdexcept>//std::out_of_range
using namespace std;

int main()
{
    vector<int> v;
    for(size_t i=0;i<10;i++)
        v.push_back(i);
    cout << "front:" << v.front() << endl;
    cout << "back:" << v.back() << endl;
    v.pop_back();
    cout << "at[1]:" << v.at(1) << endl;
    cout << "size:" << v.size() << endl;
    try{
        v.at(100);
    }catch(std::out_of_range){
        cout << "catch" << endl;
    }
}


#include<iostream>
#include<exception>
using namespace std;

class B{};
class A{
public:
    A(){};
    void fun(int i)throw(char,int,bool,A,bad_exception){
        switch(i){
        case 0:
            throw 'c';
            break;
        case 1:
            throw 1;
            break;
        case 2:
            throw true;
            break;
        case 3:
            throw A();
            break;
        case 4:
            throw 4.0;
            break;
        }
    }

};

void myException(){
    cout << "do not finish the program" << endl;
}

void myException2(){
    throw;
}

int main()
{
    set_unexpected(myException);
    A a;
    for(int i=0;i<5;i++){
        try{
            if(i==4)set_unexpected(myException2);//
            a.fun(i);
        }catch(char c){
            cout << "char=" << c << endl;
        }catch(int ii){
            cout << "int=" << ii << endl;
        }catch(bool b){
            cout << "bool=" << b << endl;
        }catch(A& a){
            cout << "a" << endl;
        }catch(bad_exception&){
            cout << "cat a bad exception" << endl;
        }
    }
}

char=c
int=1
bool=1
a
cat a bad exception


获得式初始化,构造函数在抛出异常之前完成,析构函数也会在栈反解的时候被调用
#include<iostream>
using namespace std;

template<class T,int sz=1> class D{
    T* p;
public:
    class err{};
    D(){
        p = new T;
    }
    ~D(){
        delete p;
        cout<<"~D()"<<endl;
    }
};

class A{
public:
    A(){cout<<"A()"<<endl;}
    ~A(){cout<<"~A()"<<endl;}
};

class B{
public:
//    void* operator new(size_t){
//        cout << "new B" <<endl;
//        throw 3;
//    }
//    void operator delete[](void *p){
//        cout << "delete B" << endl;
//        delete[](p);
//    }
    B(){
        cout<<"B()"<<endl;
        throw 3;
    }
    ~B(){cout<<"~B()"<<endl;}
};

class C{
    D<A> a;
    D<B> b;
public:
    C(){
        cout << "C()" <<endl;
    }
    ~C(){
        cout << "~C()" <<endl;
    }
};

int main()
{
    try{
        C c;
    }catch(...){
        cout<<"catch" << endl;
    }
}

A()
B()
~A()
~D()
catch
分享到:
评论

相关推荐

    C# 捕获C/C++异常的例子

    为了在C#中处理C++异常,我们需要使用`extern "C"`和`System::Runtime::InteropServices`命名空间中的特性来定义接口和方法。例如: ```csharp using System; using System.Runtime.InteropServices; ...

    关于C++异常处理和win32结构化异常处理

    关于C++异常处理和Win32结构化异常处理(Structured Exception Handling, SEH)的知识点,我们可以深入探讨其原理、差异以及如何在Windows平台上有效利用这两种机制。 ### C++异常处理 C++中的异常处理机制主要由`...

    c++异常处理机制示例及详细讲解

    这两天我写了一个测试c++异常处理机制的例子,感觉有很好的示范作用,在此贴出来,给c++异常处理的初学者入门。本文后附有c++异常的知识普及,有兴趣者也可以看看。下面的代码直接贴到你的console工程中,可以运行...

    C++异常处理总结

    C++异常处理总结 C++语言提供了异常处理机制,用于处理程序中的错误和异常情况。异常处理机制可以使程序结构更清晰、更健壮,并且可以防止程序崩溃。下面是C++异常处理机制的核心要点: 1. 如果使用普通的处理方式...

    C++异常处理 王胜祥

    "C++异常处理 王胜祥"这份文档,很可能详细阐述了C++中的异常处理机制,包括何时、为何以及如何使用异常来增强代码的健壮性。下面是对C++异常处理的一些核心知识点的详细解释。 1. **异常的基本概念**:在C++中,...

    一个例子演示了C++异常的推荐用法

    本示例着重于C++异常处理的最佳实践,通过`CatchC++ExceptionByReference`这个项目,我们可以学习如何有效地捕获和处理异常。 1. **异常的基本概念**: 异常是程序运行时发生的一个不寻常的情况,可能是因为逻辑...

    一个专门处理c++异常的类和例子

    "CExceptionLogger" 类就是这样一个工具,专为处理C++异常设计,能够捕获并记录程序中的未处理异常,从而提高软件的稳定性和可维护性。 CExceptionLogger 类的设计基于C++的异常处理机制,它利用了try-catch结构来...

    一个专门处理C++异常的类和例子

    本文将详细介绍CExceptionLogger类及其在处理C++异常中的应用,同时提供一个实例来演示如何使用此类。 CExceptionLogger是专门为C++设计的一个类,它的主要功能是捕获和记录那些可能导致程序异常终止的错误。这些...

    c++异常处理课件

    c++异常处理课件,可以看看,c++异常处理练习

    C++异常处理.ppt

    C++异常处理.ppt ,相信对学习c++的你来说一定有帮助

    c++异常处理及C++标准ABI

    "Exception Handling.doc"文件应该详细介绍了C++异常的抛出(throw)、捕获(catch)以及try、catch、finally块的使用方法。 C++标准,通常指的是ISO/IEC 14882,定义了语言的语法、语义以及实现细节。"c++标准.doc...

    C和C++中的异常处理

    3. 标准 C++异常处理的基本语法和语义 4. 实例剖析 EH 5. C++的 new 和 delete 操作时的异常处理 6. Microsoft 对于的实现版本中的异常处理 7. 部分构造及 placement delete 8. 自动删除,类属 new 和 delete、...

    C++异常详解

    C++异常处理是编程中一个重要的概念,它允许程序员在程序执行过程中捕获并处理错误。C++的异常处理机制提供了三个主要关键字:`try`、`catch`和`throw`,它们共同构成了异常处理的核心。 `try`块是异常处理的起点,...

    C++异常和SEH的区别

    ### C++异常与SEH的区别 #### 概述 在编程领域中,异常处理机制是确保程序健壮性和稳定性的关键部分。对于C++开发者来说,理解两种主要的异常处理方式——C++标准异常处理机制(`try-catch`)与特定于Windows平台...

    c++异常处理

    【C++异常处理】 C++异常处理是一种机制,旨在提高程序的健壮性和可靠性,它允许程序员在程序中处理可能出现的错误情况,而无需在每个可能出错的地方都插入检查和错误处理代码,从而简化了错误处理代码。C++异常...

    C++异常中的堆栈跟踪

    具有堆栈跟踪的C++异常类库和测试程序 博文链接:https://canco.iteye.com/blog/32977

    c,c++异常处理

    - **混合使用**: 如何在C++程序中同时使用C++异常处理和SEH。 - **兼容性问题**: 讨论混合使用时可能出现的兼容性问题。 通过以上内容的详细介绍,我们可以看到C和C++中的异常处理机制是非常强大且灵活的,不仅可以...

    c++异常处理机制描述

    C++异常处理机制是C++编程中用于处理程序运行时出现错误或异常情况的重要工具。在C++中,异常处理允许程序员优雅地处理错误,而不是让程序崩溃或产生未定义的行为。这一机制允许代码在出现问题时抛出一个异常,然后...

    C++ 异常处理 catch(…)介绍

    C++标准中定义了一种特殊的catch用法,那就是” catch(…)”。 感性认识 1、catch(…)到底是一个什么样的东东,先来个感性认识吧!看例子先: 代码如下: int main() { try { cout &lt;&lt; “在 try block 中, 准备...

Global site tag (gtag.js) - Google Analytics