cpp-异常处理try throw catch

    技术2026-03-19  12

    抛出的异常必须使用catch接收

    抛出的异常可以跨函数传递

    栈解旋: 当抛出异常时,同一个作用域的内容都会被销毁

    #include <iostream> #include <stdlib.h> using namespace std; void func1(){ int a=10;//当抛出异常会被销毁 throw(1); } int main(){ try{ func1(); }catch(int e){ cout << e << endl; } system("pause"); }

    特殊语法

    不能抛出任何异常 void func()throw(){} 接收任何异常 catch(...) 只能抛出指定类型异常 void func()throw(int,char*){} 处理多种类型异常 try(){ }catch(int e){ }catch(char e){ }

    异常生命周期

    只有当捕获异常后异常对象才析构 #include <iostream> #include <stdlib.h> #include <string> using namespace std; class MyErr{ public: MyErr(string errmsg){ cout << "构造异常类" << endl; this->errmsg=errmsg; } MyErr(const MyErr& err){ cout << "拷贝构造异常类" << endl; this->errmsg=err.errmsg; } MyErr& operator=(const MyErr& err){ cout << "拷贝赋值异常类" << endl; this->errmsg=err.errmsg; return *this; } ~MyErr(){ cout << "析构异常类" << endl; } public: string errmsg; }; void func1(){ int a=10;//当抛出异常会被销毁 throw MyErr("抛出异常"); } int main(){ try{ func1(); }catch(MyErr e){ cout << "捕获异常" << endl; } system("pause"); } 运行结果: 构造异常类 拷贝构造异常类 捕获异常 析构异常类 析构异常类

    继承系统异常类的自定义类对象

    #include <iostream> #include <stdlib.h> #include <string> #include <stdexcept> using namespace std; class MyErr:public exception{ public: MyErr(char* errmsg){ cout << "构造异常类" << endl; this->errmsg=new char[strlen(errmsg)+1]; strcpy(this->errmsg,errmsg); } MyErr(const MyErr& err){ cout << "拷贝构造异常类" << endl; this->errmsg=new char[strlen(err.errmsg)+1]; strcpy(this->errmsg,err.errmsg); } MyErr& operator=(const MyErr& err){ if(this->errmsg){ delete [] errmsg; } cout << "拷贝赋值异常类" << endl; this->errmsg=new char[strlen(err.errmsg)+1]; strcpy(this->errmsg,err.errmsg); return *this; } virtual const char * what() const{ cout << "what" << endl; return this->errmsg; } virtual ~MyErr(){ cout << "析构异常类" << endl; } private: char* errmsg; }; void func1(){ int a=10;//当抛出异常会被销毁 throw MyErr("抛出异常"); } int main(){ try{ func1(); }catch(exception e){ cout << e.what() << endl; } system("pause"); }
    Processed: 0.010, SQL: 9