- auto_ptrは今後のC ++標準で非推奨になりますか?
- shared_ptrの代わりにunique_ptrを所有権の譲渡に使用する必要がありますか?
- unique_ptrが標準にない場合、代わりにshared_ptrを使用する必要がありますか?
回答:
更新:この回答は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)は、より優れたソリューションを提供します。—エンドノート]
基準が承認されるまで、委員会がこの決定を修正する可能性は常にありますが、この決定はありそうもないと思います。
C ++ 11(D.10、1228ページ)でauto_ptr非推奨になるだけでなく、C ++の将来のバージョンでも削除 される予定です。
N4190を採用し、実際に削除などのC ++標準ライブラリのいくつかの古風なもの、(単に非推奨ではない)
auto_ptr、bind1st/bind2nd、ptr_fun/mem_fun/をmem_fun_ref、random_shuffle、といくつかのより多くの。これらはすべてドラフトC ++ 17標準ライブラリから削除され、将来のポータブルC ++の一部にはなりません。
それに関する別のドキュメント:プログラミング言語C ++、ライブラリ進化ワーキンググループ-詳細情報が必要な場合は、ドキュメントN4190。
代わりに使用することauto_ptrにより、自動的に使用して任意のコードを変換できますunique_ptr。
を使用
auto_ptrするコードは、「コピー」されるたびに挿入されてunique_ptr、機械的に使用に変換できます。move()auto_ptr
いいえ、非推奨ではありません。C ++ 0xが受け入れられるようになればそうかもしれません。そして、それは現実的に常にサポートされます。非推奨の機能が実際のC ++実装から削除されたことはないと思います。
auto_ptrは標準の一部ですが、使用量は大幅に少なくなっています。実用的な観点からは、その除去による影響は大幅に少なくなります。
<iostream.h>これまでに使用されたよりも多くのC ++auto_ptrが使用されていますが、MS VC ++(1つ)はそれを提供していません。