ここで、例外をスローするコンストラクターに関する Michael Burr の素晴らしい要約を読みました: Will the below code cause memory leak in c++
私の質問は次のとおりです。コンストラクターから呼び出された関数によって例外がスローされた場合の動作は似ていますか? つまり、例外がスローされた場所で例外がキャッチされず、コンストラクターに到達し、さらにコンストラクターを呼び出した関数に到達する場合です。
そのオブジェクトのクラスに含まれるメンバー オブジェクトについて知りたいのですが、それらのデストラクタは呼び出されますか? より具体的には、私の場合は、boost::shared_ptr 型のメンバーに関するものです。
次の例を検討してください。
class A {
A() { throw some_exception }
};
class B {
B() { A a = new A(); }
};
class C {
boost::shared_ptr<B> p2b;
int i;
int *pint;
someclass objsomeclass;
someclass* psomeclass;
public:
C() {
objsomeclass = someclass();
psomeclass = new someclass();
pint = new int();
p2b(new B);
}
};
void foo()
{
C c();
}
main()
{
foo();
}
p2a のデストラクタは呼び出されますか? このケースをカバーする適切で信頼できるリソースを教えていただければ幸いです。