こんにちは。
そのインスタンスのスコープから外れる時にそのインスタンスのデストラクタが呼び出されます。
例外を投げたのがメンバ関数かどうかは無関係です。
なお、throw;は現在保留中の例外を再throwする命令です。catchブロックの中で使います。
保留している例外が無い時は単にstd::terminate()を呼び出します。ここの2)参照
C++
1#include <iostream>
2
3class hoge {
4 private:
5 public:
6 hoge();
7 ~hoge();
8 void some_func();
9};
10
11hoge::hoge() { /* new 処理 */ }
12hoge::~hoge() { /* delete 処理 */ std::cout << "~hoge()\n"; }
13void hoge::some_func() { throw 123; }
14
15int main()
16{
17 {
18 hoge h;
19 std::cout << "h is in the scope.\n";
20 }
21 std::cout << "h is out of scope.\n";
22
23 try
24 {
25 hoge h;
26 h.some_func();
27 }
28 catch(int e)
29 {
30 std::cout << "e=" << e << "\n";
31 }
32
33 try
34 {
35 hoge h;
36 throw 456;
37 }
38 catch(int e)
39 {
40 std::cout << "e=" << e << "\n";
41 }
42}
43
44// h is in the scope.
45// ~hoge()
46// h is out of scope.
47// e=123
48// ~hoge()
49// e=456
wandbox
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。