短いバージョン:
最新の C++ で非スマート ポインターを使用する理由はありますか?
簡潔な答え:
間違いなく、それらが観察のみに役立つ場合、つまり、それらはポインティを所有していません。ただし、この場合でもポインターの代わりに参照を使用するようにしてください。ポインターをオプションにする必要がある場合にのみポインターを使用してください (null_ptr
たとえば、初期化して後で再割り当てするなど)。
長いバージョン:
古い C++ コードを多数含む巨大な製品があり、現在は最新の C++ 時代にリファクタリングしようとしています。[...]
長い答え:
これらの行を読んでいると、この答えが思い浮かびます。
この回答に複数回賛成できたらいいのにと思います。「[...]私たちが行ったリファクタリングごとに、『この特定の変更により、現在行っている実際のタスクがより簡単になる』ことを正当化できます。『これにより、将来の作業がよりクリーンになった』というよりも」
簡単に言えば、本当に必要でない限り、大きなリファクタリングを行わないでください。
問題は、スマート ポインターの使い過ぎなどはあるのでしょうか。
私の意見でstd::shared_ptr
は、使いすぎです。とても快適に使用でき、所有権の問題について考える必要がないという錯覚を与えてくれます。しかし、それだけではありません。Sean Parentの次の言葉に完全に同意します。「共有ポインターはグローバル変数と同じくらい優れています。」共有ポインターは、非常に難しい所有権の問題などを引き起こす可能性もあります。
一方、ヒープに何かを割り当てる必要がある場合は、unique_ptr
. 本当にヒープ割り当てが必要な場合は、使いすぎてはいけません。私の経験では、使用unique_ptr
すると、所有権の問題が自明になるため、コードがよりクリーンで理解しやすくなります。
ポインターの使用を回避/削減する方法に関する Sean Parent の興味深い講演は次のとおりです。
お役に立てれば。