更新:この回答は2010年に書かれ、予想どおりstd::auto_ptr
は廃止されました。アドバイスは完全に有効です。
C++ 0x std::auto_ptr
は非推奨となり、std::unique_ptr
。スマートポインタの選択は、ユースケースと要件によって異なります。std::unique_ptr
コンテナー内で使用できる単一所有権の移動セマンティクス(移動セマンティクスを使用)およびstd::shared_ptr
所有権が共有されている場合。
状況に最適なスマートポインターを使用してみてください。正しいポインターの種類を選択すると、他のプログラマーがデザインを理解できるようになります。
はい、今日の時点でauto_ptr
はC++ 0xで非推奨になり、代わりにunique_ptr
を使用する必要があります。最新のドラフト標準(n3035)のセクションD.9から
クラステンプレート
auto_ptr
は非推奨です。 [注:クラステンプレートunique_ptr
(20.9.10)は、より良いソリューションを提供します。 —注を終了]
基準が批准されるまで、委員会がこの決定を改訂する可能性は常にありますが、この決定はそうではないと思います。
_auto_ptr
_が廃止された C++ 11(D.10、1228ページ) だけでなく、deletedC++ の将来のバージョンでは:
N4190を採用し、(非推奨ではなく)C++標準ライブラリから_
auto_ptr
_、_bind1st
_などのいくつかの古風なものを実際に削除しました/ _bind2nd
_、_ptr_fun
_/_mem_fun
_/_mem_fun_ref
_、_random_shuffle
_、その他いくつか。これらはドラフトC++ 17標準ライブラリからすべて削除され、将来のポータブルC++の一部ではなくなります。
それに関する別のドキュメント: Programming Language C++、Library Evolution Working Group-Document N4190 、詳細情報が必要な場合。
代わりに_auto_ptr
_を使用することにより、_unique_ptr
_を自動的に使用して任意のコードを変換できます。
_
auto_ptr
_を使用するコードは、_unique_ptr
_が「コピー」されるたびにmove()
を挿入して、_auto_ptr
_を使用するように機械的に変換できます。
いいえ、廃止されていません。 C++ 0xがこれまでに受け入れられていれば、そうかもしれません。そして、現実的には常にサポートされます。廃止予定の機能が実際のC++実装から削除されたことはないと思います。