次のようなクラスがあるとします。
#include <iostream>
using namespace std;
class Boda {
private:
char *ptr;
public:
Boda() {
ptr = new char [20];
}
~Boda() {
cout << "calling ~Boda\n";
delete [] ptr;
}
void ouch() {
throw 99;
}
};
void bad() {
Boda b;
b.ouch();
}
int main() {
bad();
}
デストラクタ~Boda
が呼び出されることはないようです。したがって、ptr
リソースが解放されることはありません。
プログラムの出力は次のとおりです。
terminate called after throwing an instance of 'int'
Aborted
だから私の質問への答えはNo
です。
しかし、例外がスローされたときにスタックが巻き戻されたと思いましたか?Boda b
私の例では、なぜオブジェクトが破壊されなかったのですか?
このリソースの問題を理解するのを手伝ってください。将来はもっといいプログラムを書きたいです。
また、これはいわゆるRAII
ですか?
ありがとう、BodaCydo。