- 次の C++ 標準で auto_ptr は廃止されますか?
- 所有権の譲渡には、shared_ptr の代わりに unique_ptr を使用する必要がありますか?
- unique_ptr が標準にない場合、代わりに shared_ptr を使用する必要がありますか?
4 に答える
更新: この回答は 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, page 1228)auto_ptr
で廃止されるだけでなく、C++の将来のバージョンでも削除される予定です。
N4190 を採用し、C++ 標準ライブラリからいくつかの古風なもの( /
auto_ptr
、/ / 、など) を実際に削除しました (非推奨になっただけではありません) 。これらはすべてドラフト C++17 標準ライブラリから削除され、将来の移植可能な C++ の一部にはなりません。bind1st
bind2nd
ptr_fun
mem_fun
mem_fun_ref
random_shuffle
それに関する別の文書: Programming Language C++, Library Evolution Working Group - Document N4190、詳細が必要な場合。
代わりに次auto_ptr
を使用して、自動的にコードを変換できます。unique_ptr
コード using
auto_ptr
は機械的に usingunique_ptr
に変換でき、 「コピー」move()
されるたびに挿入されます。auto_ptr
いいえ、非推奨ではありません。C++0x が受け入れられるようになれば、そうなるかもしれません。そして、それは現実的に常にサポートされます。非推奨の機能が実際の C++ 実装から削除されたとは思いません。