2

に疑問がありboost::shared_ptrます。

私はこれをデストラクタで見ました ( ptrは boost::shared_ptr です): ptr = boost::shared_ptr< int >( new int )

それは大丈夫ですか?。ptr.reset()ここに記載されているように、すべきではありません:意図的にブーストを削除する方法::shared_ptr?

乾杯!。

4

2 に答える 2

4

後でptrで何をしたいかによります。

新しい値を指すように再割り当てする必要がある場合は、それがコードの役割です。明示的に無効にする必要がある場合は、それが行われreset()ます。デストラクタによって暗黙的に破棄されるクラスメンバーの場合、奇妙な破棄順序の要件がない限り、おそらく何もする必要はありません。

これ以上の文脈がなければ、どちらが正しいかを言うことは不可能です。

更新:これは実際にはデストラクタではなく、オブジェクトを奇妙な半破壊状態のままにすることを目的としたメンバー関数であると言うので、その奇妙な状態がどのように指定されているかによって異なります。空のポインタが必要な場合は、リセットします。有効なポインタが必要であるが、以前に共有されていたものへのポインタが必要ない場合は、それを再割り当てします。さらに良いことに、この状態を完全に排除して、オブジェクトにより強力な有効性の保証を与えます。

于 2012-12-14T10:35:28.720 に答える
1

ptr = boost::shared_ptr< int >( new int )内部値を、コンストラクターを呼び出して使用したくない新しい int に交換しますboost::shared_ptr... 彼のデストラクタで。

ptr.reset()内部値を何も交換しません。リンクした投稿で述べたように、より良い方法です

于 2012-12-14T10:38:09.073 に答える