4

ファクトリからポインタを返す最良の方法は何ですか? std::unique_ptrそれは、またはstd::shared_ptr生のポインタであるべきですか?

また、std::unique_ptr封じ込めがstd::shared_ptrあれば、凝集があれば行くべきだとも言われました。これは正しい方法ですか?

4

2 に答える 2

5

DLL の境界を越えてポインターを渡すなど、非常に特殊な場合にのみ生のポインターを考慮する必要があります。

と の間shared_ptrunique_ptr、私の意見は後者を好むことです。これにより、ユーザーにとってインターフェースがより柔軟になります。unique_ptr必要に応じて、返されたをいつでも に変換できますshared_ptrが、さらに重要なことに、ポインターを呼び出しunique_ptr::releaseてから手動で管理することもできます (おそらく良い考えではありませんが、オプションを開いたままにします)。

ファクトリが返された にカスタムのデリータを割り当てる必要がある場合、とunique_ptrの動作の違いは、マネージ ポインタが の場合、前者はデリータを呼び出さないが、後者はそうすることに注意してください。したがって、ファクトリが(おそらく失敗状態として) 返される可能性があり、誰かが を に変換する場合は、デリータが引数として呼び出されたことを処理できることを確認してください。unique_ptrshared_ptrnullptrnullptrunique_ptrshared_ptrnullptr

于 2012-10-25T05:34:33.717 に答える
0

生のポインターを返すべきではありません。ほとんどの場合、 std::unique_ptr と std::shared_ptr は同じように問題ないと思います。もちろん、標準のスマート ポインター クラスだけではありません。たとえば、侵入型の参照カウントを実装するクラスがあり、それらを処理するために特別なスマート ポインター クラス (通常は RefPtr と呼ばれます) を実装する人がいます。CComPtr がある COM インターフェイスもあります。

于 2012-10-25T05:31:46.373 に答える