C++에서 예외를 처리하는 과정은 다음과 같습니다. 프로그램 실행 중에 예외가 발생하면 이 함수에서 처리할 필요가 없으며 대신 오류 메시지가 발생하고 해결을 위해 상위 수준 함수로 전달됩니다. .상위에서 해결이 되지 않아 상위로 전달되어 처리됩니다. 이렇게 단계별로 업로드를 하게 되면, 최고 레벨까지 처리가 불가능할 경우, 실행 중인 시스템이 자동으로 시스템 함수 종료를 호출하게 됩니다.
종료 기능 사용법을 익히면 예외 처리에 도움이 됩니다
一 예외 발생 시. , 종료 함수가 호출되고 코드:
[cpp] view plaincopyprint? #include <iostream> #include <exception> using namespace std; void on_terminate(){ cout<<"terninate function called!"<<endl; cin.get(); } int main(void){ set_terminate(on_terminate); throw exception(); cout<<"terminate function not called!"<<endl; cin.get(); return 0; }
terminate가 호출됩니다.
1 예외가 전송되고 생성자가 예외를 생성할 때
2 예외가 전송되거나 소멸자가 예외를 생성할 때
3 정적 객체의 생성 또는 소멸 예외 보내기
4 atexit에 등록된 함수에서 예외가 발생한 경우
5 사용자 정의 예외가 발생했지만 실제로 예외가 생성되지 않은 경우
6 기본 unExceptioned() 함수가 호출되는 경우
예 :
[cpp] view plaincopyprint? #include <iostream> #include <exception> using namespace std; void on_terminate(){ cout<<"terminate function called!"<<endl; cin.get(); } class custom_exception{ custom_exception(){ } custom_exception(const custom_exception& excep){ throw exception(); } }; void case_1(){ try{ throw custom_exception(); } catch(...){ } }
함수가 예외를 던질 때 함수가 내부적으로 객체를 생성하면 시스템은 먼저 객체의 소멸자를 호출한 후 예외를 던지기 시작합니다.
동시에 상속 관계가 있는 클래스의 예외 중 하위 클래스의 예외는 맨 앞에 배치하고, 기본 클래스의 예외는 맨 뒤에 배치해야 합니다. 이렇게 하면 하위 클래스의 예외를 먼저 처리할 수 있습니다. 및 상위 클래스의 예외 최종 처리.
[cpp] view plaincopyprint? #include<iostream> using namespace std; class X { public: class Trouble {}; //注意:类中嵌套类的申明和定义,学习!!! class small: public Trouble {}; class big:public Trouble {};//类中的继承!!! void f(){ throw big(); } }; int main() { X x; try{ x.f(); } catch(X::Trouble &) { cout<<"caught Trouble"<<endl; } catch(X::small&) { cout<<"caught small"<<endl; } catch(X::big&) { cout<<"caught big"<<endl; } return 0; }
이 경우 발생한 big() 유형 예외는 문제 클래스에 의해 독점됩니다. 또한 모든 예외를 순차적으로 캡처하려면...을 사용해야 합니다. 마지막에만 배치됩니다.
줄임표 예외 처리기는 어떤 매개 변수도 허용하지 않으므로 예외에 대한 정보를 얻을 수 없으며 예외 유형을 알 수도 없습니다. 이러한 종류의 catch 문은 정리에 자주 사용됩니다. 자원을 확보하고 발견된 예외를 다시 발생시킵니다.
관련 권장 사항:
nginx+php-fpm 502 잘못된 게이트웨이 예외 솔루션
위 내용은 C++ 예외 처리: 시스템 함수 호출 종료의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!