※ ChatGPTを利用し、要約された質問です(原文:添字範囲エラー送出とデストラクタについて)
添字範囲エラー送出とデストラクタについて
このQ&Aのポイント
質問文章からセンセーショナルなタイトルを30文字前後で生成。添字範囲エラー送出とデストラクタについて
下記のようにSiZE=5,num=6を投入した場合、添字演算子[]関数で添字範囲エラー送出の場合にIdxRngErr例外を発生し、デストラクタが呼ばれる理由を教えて頂きたい。
質問する理由は、添字範囲エラーが発生した場合にデストラクタが呼ばれる理由を知りたいためです。
添字範囲エラー送出とデストラクタについて
下記のように(1)SiZE=5,(2)num=6 を投入した場合、添字演算子[]関数で(3)添字範囲エラー送出(size=5,I=5)の時、
IdxRngErr例外を発生し、(4)デストラクタを呼んでcatch((5)catch (IntArray::IdxRngErr&)で捕捉される。
質問 IdxRngErr例外を発生により、デストラクタを呼ばれる理由を教えて頂きたい。
***********************************************************************************
main()
{
int size, num;
cout << "要素数:"; cin >> size; (1) 5を投入
cout << "データ数:"; cin >> num; 、 (2) 6を投入
f(size, num);
return 0;
}/
***************************************************************************************
//===== 整数配列クラス ======//
class IntArray {
int size; // 配列の要素数
int* vec; // 先頭要素へのポインタ
~IntArray() { delete[] vec; } // (4)デストラクタよりIdxRngErrがcatch(5)される。
int& operator[](int i) { // 添字演算子[]
if (i < 0 || i >= size)
throw IdxRngErr(this, i); (3)// 添字範囲エラー送出(size=5,I=5)の時,
return vec[i];
}
*******************************************************************************************
/
//--- 要素数sizeの配列にnum個のデータを代入して表示 --//
void f(int size, int num)
{
try {
IntArray x(size);
for (int i = 0; i < num; i++) {
x[i] = i;
cout << "x[" << i << "] = " << x[i] << '\n';
}
}
(5)catch (IntArray::IdxRngErr& x) {
cout << "添字オーバフロー:" << x.Index() << '\n';
return;
i
お礼
回答ありがとうございます。「ブロックから出る」とは、IdxRngErrによりtryブロックからXオブジェクトが消滅するのでデストラクタ発生する意味でしょうか
補足
回答ありがとうございます。「ブロックから出る」とは、IdxRngErrによりtryブロックからXオブジェクトが消滅するのでデストラクタ発生する意味でしょうか