このコードは、 class 内でオブジェクトintを構築しているときに例外をスローします。例外は通常のブロックによってキャッチされ、コードは次のように出力します。DogUseResourcesinttry-catch
Cat()
Dog()
~Cat()
Inside handler
#include <iostream>
using namespace std;
class Cat
{
public:
Cat() { cout << "Cat()" << endl; }
~Cat() { cout << "~Cat()" << endl; }
};
class Dog
{
public:
Dog() { cout << "Dog()" << endl; throw 1; }
~Dog() { cout << "~Dog()" << endl; }
};
class UseResources
{
class Cat cat;
class Dog dog;
public:
UseResources() : cat(), dog() { cout << "UseResources()" << endl; }
~UseResources() { cout << "~UseResources()" << endl; }
};
int main()
{
try
{
UseResources ur;
}
catch( int )
{
cout << "Inside handler" << endl;
}
}
UseResources()ここで、コンストラクターの定義を、function try block以下のように を使用するものに置き換えると、
UseResources() try : cat(), dog() { cout << "UseResources()" << endl; } catch(int) {}
出力は同じです
Cat()
Dog()
~Cat()
Inside handler
つまり、まったく同じ最終結果が得られます。
それでは、の目的は何function try blockですか?