可能重复:
When is a function try block useful?
Difference between try-catch syntax for function函数try块的用途是什么?
在构造内UseResources
类Dog
对象时,此代码引发int
异常。如下
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
之一:该int
异常由正常try-catch
块和代码输出捕获,
UseResources() try : cat(), dog() { cout << "UseResources()" << endl; } catch(int) {}
的输出是相同的
Cat()
Dog()
~Cat()
Inside handler
即,具有完全相同的最终结果。
那么什么是function try block
的目的呢?
重复的副本重复... – Xeo
这是C++ 11吗?我从来没有见过它 –
@VJovic我不知道这是什么时候在语言中引入的。但它并不新鲜。 – Belloc