86
  1. 次の C++ 標準で auto_ptr は廃止されますか?
  2. 所有権の譲渡には、shared_ptr の代わりに unique_ptr を使用する必要がありますか?
  3. unique_ptr が標準にない場合、代わりに shared_ptr を使用する必要がありますか?
4

4 に答える 4

86

更新: この回答は 2010 年に書かれたものであり、予想どおりstd::auto_ptr廃止されました。アドバイスは完全に有効です。

C++0x ではstd::auto_ptrstd::unique_ptr. スマート ポインターの選択は、std::unique_ptrコンテナー内で (移動セマンティクスを使用して) 使用できる単一所有権の移動セマンティクスとstd::shared_ptr、所有権が共有されている場合のユース ケースと要件によって異なります。

状況に最も適したスマート ポインターを使用するようにしてください。適切なポインターの種類を選択することで、他のプログラマーが設計を理解できるようになります。

于 2010-03-08T19:37:30.210 に答える
23

はい、今日の時点auto_ptrで C++0x では非推奨になり、unique_ptr代わりに使用する必要があります。最新のドラフト規格 (n3035) のセクション D.9 から

クラス テンプレートauto_ptrは非推奨です。[注: クラス テンプレートunique_ptr(20.9.10) は、より優れたソリューションを提供します。—終わりのメモ]

基準が承認されるまで、委員会がこの決定を修正する可能性は常にありますが、この決定についてはありそうにないと思います。

于 2010-03-08T19:41:50.863 に答える
19

C++11 (D.10, page 1228)auto_ptrで廃止されるだけでなく、C++の将来のバージョンで削除される予定です。

N4190 を採用し、C++ 標準ライブラリからいくつかの古風なもの( / auto_ptr、/ / 、など) を実際に削除しました (非推奨になっただけではありません) 。これらはすべてドラフト C++17 標準ライブラリから削除され、将来の移植可能な C++ の一部にはなりません。bind1stbind2ndptr_funmem_funmem_fun_refrandom_shuffle

それに関する別の文書: Programming Language C++, Library Evolution Working Group - Document N4190、詳細が必要な場合。

代わりに次auto_ptrを使用して、自動的にコードを変換できます。unique_ptr

コード usingauto_ptrは機械的に usingunique_ptrに変換でき、 「コピー」move()されるたびに挿入されます。auto_ptr

于 2014-11-24T20:30:13.340 に答える
2

いいえ、非推奨ではありません。C++0x が受け入れられるようになれば、そうなるかもしれません。そして、それは現実的に常にサポートされます。非推奨の機能が実際の C++ 実装から削除されたとは思いません。

于 2010-03-08T19:48:01.950 に答える