ファクトリからポインタを返す最良の方法は何ですか? std::unique_ptr
それは、またはstd::shared_ptr
生のポインタであるべきですか?
また、std::unique_ptr
封じ込めがstd::shared_ptr
あれば、凝集があれば行くべきだとも言われました。これは正しい方法ですか?
ファクトリからポインタを返す最良の方法は何ですか? std::unique_ptr
それは、またはstd::shared_ptr
生のポインタであるべきですか?
また、std::unique_ptr
封じ込めがstd::shared_ptr
あれば、凝集があれば行くべきだとも言われました。これは正しい方法ですか?
DLL の境界を越えてポインターを渡すなど、非常に特殊な場合にのみ生のポインターを考慮する必要があります。
と の間shared_ptr
でunique_ptr
、私の意見は後者を好むことです。これにより、ユーザーにとってインターフェースがより柔軟になります。unique_ptr
必要に応じて、返されたをいつでも に変換できますshared_ptr
が、さらに重要なことに、ポインターを呼び出しunique_ptr::release
てから手動で管理することもできます (おそらく良い考えではありませんが、オプションを開いたままにします)。
ファクトリが返された にカスタムのデリータを割り当てる必要がある場合、とunique_ptr
の動作の違いは、マネージ ポインタが の場合、前者はデリータを呼び出さないが、後者はそうすることに注意してください。したがって、ファクトリが(おそらく失敗状態として) 返される可能性があり、誰かが を に変換する場合は、デリータが引数として呼び出されたことを処理できることを確認してください。unique_ptr
shared_ptr
nullptr
nullptr
unique_ptr
shared_ptr
nullptr
生のポインターを返すべきではありません。ほとんどの場合、 std::unique_ptr と std::shared_ptr は同じように問題ないと思います。もちろん、標準のスマート ポインター クラスだけではありません。たとえば、侵入型の参照カウントを実装するクラスがあり、それらを処理するために特別なスマート ポインター クラス (通常は RefPtr と呼ばれます) を実装する人がいます。CComPtr がある COM インターフェイスもあります。