1

私のクラスのメンバーは、オブジェクトの作成時にboost::scoped_ptr設定されるです。(T*)0このクラスにはinit()、スマートポインタを新しいオブジェクトで実際に初期化するメソッドがあります。

ただし、そのスマートポインターが有効な参照を持つ前に例外がスローされた場合、非常にスマートにnullを削除しようとするか(リリース)、アサートします(デバッグ)。

元のソースコードを変更せずに、破棄時にnullポインタを無視するようにするにはどうすればよいですか。そして、それが不可能な場合は、代わりに使用するより適切な代替スマートポインタークラスがありますか?

4

2 に答える 2

2

std::unique_ptr代わりにboost::scoped_ptr、基になるオブジェクトの状態をチェックするカスタム削除関数を試して提供することができます。http://en.cppreference.com/w/cpp/memory/unique_ptrを参照してください。

于 2012-10-16T06:42:05.343 に答える
1

boost :: scoped_ptrは、実際にはデストラクタ内のnullポインタを無視します。boost :: scoped_ptrは、削除にboost :: checked_delete()を使用します。boost :: checked_delete()はdelete、削除するためにプレーンを使用します(boost :: checked_delete()は、Tが不完全でないようにもチェックします)。

また、deleteを使用してnullポインタを削除することができます(とは異なりますfree())。エラーが本当にboost::scoped_ptrにあることを確認しますか?

于 2012-10-16T06:54:09.060 に答える