7

C ++ 11がsを追加することに気付いたとき、動的ポインターの安全なベクトルとマップを行う方法を探していましたunique_ptr。Google で使用方法を調べましたが、詳細を探すことができませんでした。私が知る必要があるのは次のとおりです。

  1. unique_ptr自動メモリ収集以外に 、ポインターと s の違いは何ですか?
  2. unique_ptrベクトルまたはマップから a を削除するにはどうすればよいですか? イテレータを消去する以外に使用しなければならない特別なコードはありますか?
4

2 に答える 2

13
  1. 何もない。Aはポインタの単なるラッパーであり、が破棄さunique_ptrれるとポインタを削除します。unique_ptrオーバーヘッドはありません(auto_ptr置き換えるテンプレートと同じように)。
  2. いいえ、動作します。難しいのは、実際にはポインタをベクトルまたはマップに挿入することですが、をコンテナに移動する必要があります。unique_ptr
于 2011-01-09T03:09:33.017 に答える
4
  1. 違いは、unique_ptrが移動セマンティクスに従うことです。さらに、その名前が示すように、それをコピーすることはできません。

  2. の要素を消去するstd::vector<std::unique_ptr<T> >と、そのポインタが指しているものはすべて効果的に削除されます。

于 2011-01-09T03:13:51.290 に答える