時折、ほんの一瞬ですが、auto_ptr はクールだと思います。しかし、ほとんどの場合、それを無関係にするもっと単純なテクニックがあることを私は認識しています. たとえば、例外がスローされた場合でも、オブジェクトを自動的に解放したい場合は、オブジェクトを新しく作成して auto_ptr に割り当てることができます。とてもかっこいい!しかし、もっと簡単に自分のオブジェクトをローカル変数として作成し、スタックに任せることもできたはずです (当たり前!)。
したがって、auto_ptr の使用を禁止しているGoogle C++ コーディング標準を見つけたとき、私はそれほど驚きませんでした。Google は、代わりに scoped_ptr を使用する必要があると述べています (スマート ポインターが必要な場合)。
私の経験に反して、誰かが auto_ptr を使用するのに最適または最も簡単なものであるという確固たる理由を教えてくれるかどうか知りたいです。そうでない場合は、自分で使用することを禁止すると思います(Googleのリードに従って)。
更新:懸念を表明した人のために、いいえ、私はGoogle標準を採用していません. たとえば、Google のアドバイスに反して、例外処理を有効にすることに同意します。また、私が作成した印刷可能な列挙型などのプリプロセッサ マクロを使用することも好きです。私を驚かせたのは auto_ptr トピックです。
update2 : 私の回答は、以下の 2 つのレスポンダーとWikipedia からのメモから得られたものであることがわかりました。まず、Herb Sutter は有効な使用方法を示しました (ソース シンク イディオムとライフタイム リンク オブジェクト構成)。第二に、TR1 とブーストが利用できないか禁止されており、C++03 のみが許可されているショップがあります。第 3 に、ウィキペディアによると、C++0x 仕様は auto_ptr を廃止し、unique_ptr に置き換えています。したがって、私の答えは次のとおりです。(考慮しているすべてのプラットフォームで)使用できる場合は unique_ptr を使用し、それ以外の場合は、Sutter が示すケースに auto_ptr を使用します。