2

ここBoostのドキュメントを読んでいて、最初に次のように述べています。weak_ptr

オブジェクトへの最後の shared_ptr がなくなり、オブジェクトが削除されると、削除されたオブジェクトを参照する weak_ptr インスタンスから shared_ptr を取得しようとすると失敗します。コンストラクターは、boost::bad_weak_ptr 型の例外をスローし、weak_ptr: :lock は空の shared_ptr を返します。

これまでのところすべて明確ですが、2行後に次のように表示されます。

weak_ptr 操作が例外をスローすることはありません。

各ステートメントは何を参照していますか?

4

3 に答える 3

2

shared_ptraから aを構築すると、例外weak_ptrがスローされる場合があります。bad_weak_ptr(weak_ptr::lockこれをテストできるようにしたい場合は、代わりに使用してください。)

オブジェクト自体に対する操作weak_ptrはスローしません。

于 2014-02-24T10:10:50.690 に答える
2

weak_ptrクラスは、内部的にどの操作でもスローしません。呼び出すと、( ) のコンストラクターlock()によってスローされた例外がキャッチされ、空の が返されます。関数のソースを見て確認してください。shared_ptrbad_weak_ptrshared_ptrlock()

于 2014-02-24T10:10:51.667 に答える