可能性の重複:クラス
UseResources
内部Dog
オブジェクトを構築しながら
When is a function try block useful?
Difference between try-catch syntax for function関数tryブロックの目的は何ですか?
このコードは、int
例外をスロー。 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()
コンストラクタの定義を置き換える場合は、function try block
を使用するもので、以下のように、
UseResources() try : cat(), dog() { cout << "UseResources()" << endl; } catch(int) {}
出力は
0123と同じですCat()
Dog()
~Cat()
Inside handler
つまり、まったく同じ最終結果です。
それでは、function try block
の目的は何ですか? Dog::Dog()
スロー
class UseResources
{
class Cat *cat;
class Dog dog;
public:
UseResources() : cat(new Cat), dog() { cout << "UseResources()" << endl; }
~UseResources() { delete cat; cat = NULL; cout << "~UseResources()" << endl; }
};
場合、cat
は、メモリリークが発生します:UseResources
は、次のように定義されている場合
複製物の複製の複製... – Xeo
これはC++ 11ですか?私は前にそれを見たことがない –
@VJovicこれがいつ言語で導入されたのか分かりません。しかしそれは新しいものではない。 – Belloc