>  기사  >  백엔드 개발  >  C++ 예외 처리 메커니즘 및 코드 예제

C++ 예외 처리 메커니즘 및 코드 예제

王林
王林원래의
2023-08-21 22:07:441518검색

C++ 예외 처리 메커니즘 및 코드 예제

C++ 프로그래밍에서 예외 처리 메커니즘은 런타임 오류 및 예상치 못한 상황을 처리하는 데 도움이 되어 프로그램을 더욱 강력하고 안정적으로 만드는 매우 중요한 개념입니다. 이 기사에서는 예외 정의, 예외 발생, 예외 포착, 예외 처리기 등을 포함하여 C++의 예외 처리 메커니즘을 소개하고 독자가 더 잘 이해하고 적용할 수 있도록 몇 가지 코드 예제를 제공합니다.

1. 예외의 정의

프로그램이 정상적으로 실행되는 동안 처리되지 않은 오류나 예상치 못한 상황이 발생하면 예외가 발생합니다. 예외는 프로그램의 안전과 신뢰성을 보장하기 위해 프로그램에 오류가 발생할 때 오류 정보를 제공하고 프로그램을 정상적으로 종료할 수 있는 프로그램에 대한 보호 메커니즘으로 이해될 수 있습니다.

C++에서는 std::Exception, std::bad_alloc, std::runtime_error 등과 같은 다양한 유형의 예외를 나타내는 일부 표준 예외 클래스를 정의합니다. 특정 예외를 나타내기 위해 예외 클래스를 사용자 정의할 수도 있습니다.

2. 예외 발생

프로그램에서 예외가 발생하면 throw 키워드를 사용하여 예외를 발생시키고 예외 개체를 예외 처리기에 전달할 수 있습니다. 일반적으로 예외를 발생시키는 구문은 다음과 같습니다.

throw exceptionType(argument);

그 중 예외 유형은 예외 클래스의 유형이고 인수는 예외 개체의 매개 변수로 모든 유형의 데이터가 될 수 있습니다.

다음은 표준 예외 클래스 std::runtime_error를 발생시키고 오류 메시지를 매개변수로 전달하는 방법을 보여주는 간단한 코드 예제입니다.

#include <iostream>
#include <stdexcept>

void division(int a, int b){
  if (b == 0){
    throw std::runtime_error("Division by zero");
  }
  std::cout << "Result: " << a/b << std::endl;
}

int main(){
  try{
    division(10, 0);
  }
  catch(std::exception& e){
    std::cout << "Exception caught: " << e.what() << std::endl;
  }
  return 0;
}

위 코드에서 제수가 0이면 프로그램은 오류를 발생시킵니다. std ::runtime_errorException을 실행하고 오류 메시지 문자열을 매개변수로 전달합니다. 기본 함수에서는 try-catch 문을 사용하여 이 예외를 포착하고 예외 오류 메시지를 인쇄합니다.

3. 예외 포착

프로그램에서 예외가 발생하면 프로그램 충돌을 방지하기 위해 예외를 포착하고 처리해야 합니다. try-catch 문을 사용하여 예외를 포착할 수 있으며 구문은 다음과 같습니다.

try{
  // 可能抛出异常的代码
}
catch(exceptionType1& e1){
  // 处理类型为exceptionType1的异常
}
catch(exceptionType2& e2){
  // 处理类型为exceptionType2的异常
}
catch(...){
  // 处理所有类型的异常
}

try 문 블록에는 예외를 발생시킬 수 있는 코드를 포함할 수 있습니다. 프로그램에서 예외가 발생하면 try 문 블록에서 벗어나 예외 유형과 catch 문이 일치하는지에 따라 처리하기 위해 해당 catch 문 블록으로 들어갑니다. 마지막 catch 문인 catch(...)는 모든 유형의 예외를 처리할 수 있지만 예외 개체에 대한 정보가 손실되고 프로그램 디버깅 및 유지 관리에 불편하므로 사용하지 않는 것이 좋습니다.

다음은 std::runtime_error 예외를 포착하고 처리하는 방법을 보여주는 간단한 코드 예제입니다.

#include <iostream>
#include <stdexcept>

void division(int a, int b){
  if (b == 0){
    throw std::runtime_error("Division by zero");
  }
  std::cout << "Result: " << a/b << std::endl;
}

int main(){
  try{
    division(10, 0);
  }
  catch(std::runtime_error& e){
    std::cout << "Exception caught: " << e.what() << std::endl;
  }
  return 0;
}

위 코드에서 제수가 0이면 프로그램은 std::runtime_error 예외를 발생시킵니다. 기본 함수에서는 try-catch 문을 사용하여 이 예외를 포착하고 예외 오류 메시지를 인쇄합니다.

4. 예외 처리기

try-catch 문 외에도 C++에서는 포착되지 않은 예외를 처리하는 예외 처리기라는 특수 메커니즘도 제공합니다. std::set_terminate() 함수를 사용하여 예외 핸들러를 등록하고 프로그램에서 포착되지 않은 예외가 발생할 때 핸들러 코드를 실행할 수 있습니다. 예외 처리기는 일반적으로 메모리 부족, 파일 읽기 및 쓰기 오류 등과 같은 심각한 오류를 처리하는 데 사용됩니다.

다음은 예외 처리기를 등록하고 사용하는 방법을 보여주는 간단한 코드 예제입니다.

#include <iostream>
#include <cstdlib>

void myExceptionHandler(){
  std::cout << "Unhandled exception" << std::endl;
  std::exit(1);
}

int main(){
  std::set_terminate(myExceptionHandler);
  int* p = new int[1000000000];
  delete[] p;
  return 0;
}

위 코드에서는 std::set_terminate() 함수를 사용하여 예외 처리기 myExceptionHandler를 등록하고, main 함수에서 큰 메모리 블록을 할당하십시오. 메모리 부족으로 인해 프로그램은 std::bad_alloc 예외를 발생시킵니다. 이 예외는 myExceptionHandler 프로세서에 의해 포착되고 오류 메시지를 인쇄한 후 프로그램을 종료합니다.

요약

C++ 예외 처리 메커니즘은 프로그램의 매우 중요한 부분으로, 런타임 오류와 예상치 못한 상황을 처리하는 데 도움이 되어 프로그램을 더욱 강력하고 안정적으로 만들 수 있습니다. 이 기사에서는 C++의 예외 정의, 예외 발생, 예외 잡기, 예외 처리기 등을 소개하고 독자가 이를 더 잘 이해하고 적용할 수 있도록 몇 가지 코드 예제를 제공합니다. 실제 프로그래밍에서는 예외 처리 메커니즘을 합리적으로 사용하고 남용과 오용을 피하여 프로그램의 효율성과 유지 관리 가능성을 보장해야 합니다.

위 내용은 C++ 예외 처리 메커니즘 및 코드 예제의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.