此代码在 class 内int
构造对象时引发异常。异常被普通块捕获,代码输出:Dog
UseResources
int
try-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()
构造函数的定义替换为使用 a的定义function try block
,如下所示,
UseResources() try : cat(), dog() { cout << "UseResources()" << endl; } catch(int) {}
输出是一样的
Cat()
Dog()
~Cat()
Inside handler
即,最终结果完全相同。
那么, a 的目的是function try block
什么?