スマート ポインターをもっと活用したいプロジェクトがあります。全体として、私はこの目標に成功しています。ただし、「ベスト プラクティス」とは何かよくわからないことが 1 つあります。
基本的に、関数から「ポインター」を返したいのですが、ユーザーはそれをスマートポインターに保持する必要があります。それだけでなく、特定のスマート ポインター (共有とスコープ) を強制したくありません。
scoped_ptr
問題は主に、aを aにアップグレードする適切な方法がないように思われることですshared_ptr
(それが理想的な解決策だと思います)。所有権の譲渡が可能になり、そのような問題が発生する可能性があるため、彼らがこれを行わなかった理由を理解していstd::auto_ptr
ます。
ただし、この場合、所有権の譲渡は良い考えのようです。だから私の考えは次のようなものです:
// contrived example of factory pattern
std::auto_ptr<A> func() { return std::auto_ptr<A>(new A); }
と の両方が a から所有権を取得するコンストラクターを持っているscoped_ptr
ため、これは「問題なく」機能します。shared_ptr
std::auto_ptr
だから私の質問は、これは良い習慣ですか?より良い解決策はありますか?私が思いついた唯一の実際の代替手段は、次のようにテンプレート テンプレートを戻り値として使用することです。
// similar to above example
template <template <typename> class P>
P<A> func() { return P<A>(new A); }
これは実際にはうまく機能する可能性がありますが、それを機能させるにはいくつかの作業が必要だと思いますscoped_ptr
.
考え?