std::auto_ptr には const コピー コンストラクターがないため、コレクションで直接使用することはできません。たとえば、ブースト ポインター コレクション テンプレートを使用せずに std::auto_ptr のベクトルを設定する方法はありますか?
3 に答える
C++0x コンパイラを使用している場合は、必要に応じてshared_ptrまたはunique_ptrを使用できます。
@James McNellis の厚意により、ここunique_ptrに正しい使用法の良い例があります。ウォークスルーについては、@D.Shawley の厚意により、こちらをご覧ください。[これらのスレッドでの賛成票は引き続き歓迎されると思います。]shared_ptr
vectorofauto_ptrは常に無効ですが、Visual C++ v6 は同意しませんでした。
いいえ、 のベクトルを持つことはできませんが、可能std::auto_ptrな多くの推測が存在します。ただし、コンパイラが C++0x をサポートしている場合std::unique_ptrは、非推奨の自動ポインタの新しい代替手段である を使用できます。これは、新しい標準から引用され、優れた代替手段を提供します。このスレッドも参照してください
auto_ptr は、変数がスコープを離れたときに自動削除されるように設計されています。コレクションで使用するのではなく、前述のように、shared_ptr などを使用する必要があります。
auto_ptr の典型的な使用例:
void foo()
{
auto_ptr<int> bar = auto_ptr<int>(new int);
...
return; //memory held by auto_ptr is automatically deleted
}
auto_ptr の特殊なセマンティクスがよくわからない場合、この使用法を超えるものは潜在的に危険であり、壊れている可能性があります。(編集:アーメンのコメントに基づいて明確にする)