- 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つ)はそれを提供していません。