C++ ですべての例外をキャッチ

Muhammad Adil 2023年12月11日
  1. C++ での例外処理
  2. C++ ですべての例外をキャッチ
  3. C++ ですべての例外をキャッチする手順
C++ ですべての例外をキャッチ

C++ は、静的に型付けされた、自由形式のマルチパラダイムコンパイル型言語である強力な汎用プログラミング言語です。C++ は、Windows OS を含む、多くのプログラムとアプリケーションを作成してきました。

C++ 11 では、新しい現在の例外メカニズムを使用して、すべての例外をキャッチします。この記事では、すべての例外が C++ でどのように処理されるかについて詳しく説明します。

例外処理の紹介から始めましょう。

C++ での例外処理

例外処理は、プログラミング言語でエラーや例外を処理するために使用されるメカニズムです。C++ は、特定の種類の例外をキャッチまたは無視したり、クリーンアップにデストラクタを使用したりするなど、豊富な例外処理機能を提供します。

これは、プログラマーがバッファオーバーランやメモリリークなどの一般的なエラーを回避するのに役立ちます。これらのエラーは、通常、プログラムのクラッシュや不規則な動作を引き起こします。例外処理により、プログラマーは、エラーが発生しやすいコードを、個別にテストして、プログラマーが望む場合は単に無効にできる例外処理コードにカプセル化することで、簡単に処理できます。

例外処理により、プログラマーは、予期しない状況をクラッシュさせることなく処理し、発生したときに回復できる堅牢なプログラムを作成できます。

例外処理は、同期または非同期のいずれかになります。

プログラムの実行を中断せずにコードの問題を処理できる場合、同期例外が生成されます。同期例外は、チェック例外とも呼ばれます。

一方、プログラムの実行を中断せずに処理できないコードに問題がある場合、非同期例外が生成されます。非同期例外は、チェックされていない例外とも呼ばれます。

C++ ですべての例外をキャッチ

新しい現在の例外メカニズムは、C++ ですべての例外をキャッチする方法です。C++11 で導入されました。これは、try-catch ブロックで一部の例外のみをキャッチする従来の手法に代わるものです。

この新しい方法には、古い方法よりも好ましいいくつかの機能があります。

以前の方法は、throw キーワードを使用して例外をスローし、try-catch ブロックでキャッチすることでした。新しい方法は、throw キーワードの後に​​、キャッチしたい例外のタイプのリストを使用することです。

例外タイプを表すオブジェクトを格納して渡す方法がある限り、std::exception だけでなく、任意の例外タイプで使用できます。

さらに、新しいシステムでは、さまざまなタイプの例外をキャッチできる関数をいくつでも指定できます。古いシステムとは異なり、例外タイプごとに個別の関数を使用する必要はありません。

C++ ですべての例外をキャッチする手順

C++ のすべての例外をキャッチするには、次の手順が必要です。

  • 例外ハンドラとして使用するクラスを宣言します。
  • このハンドラーによってキャッチされる例外を定義します。
  • main 関数に、例外をキャッチするために使用されるクラスのインスタンスを使用して、新しい C++11 例外メカニズムを呼び出させます。
  • 例外をスローできるコードを記述し、現在の例外メカニズムがそれをキャッチすることを確認します。

新しい C++11 例外メカニズムにより、プログラマーは、コードごとに try-catch ブロックを手動で作成しなくても、コード内で発生する可能性のあるすべてのランタイムエラーを簡単にキャッチできます。

try-catch ステートメントの例を見てみましょう。

#include <iostream>
using namespace std;

int main() {
  try {
    throw 5;
  } catch (char *hello) {
    cout << "Just a Demo of C++11" << hello;
  } catch (...) {
    cout << "Stop Here\n";
  }
  return 0;
}

上記のコードのライブデモンストレーションを確認するには、ここをクリックしてください。

著者: Muhammad Adil
Muhammad Adil avatar Muhammad Adil avatar

Muhammad Adil is a seasoned programmer and writer who has experience in various fields. He has been programming for over 5 years and have always loved the thrill of solving complex problems. He has skilled in PHP, Python, C++, Java, JavaScript, Ruby on Rails, AngularJS, ReactJS, HTML5 and CSS3. He enjoys putting his experience and knowledge into words.

Facebook

関連記事 - C++ Exception