次の機能はOKです:
void DoSomething(auto_ptr< … >& a)....
あなたはそれをすることができますが、なぜあなたがそれをしたいのかわかりません.
auto_ptr を使用して ptr の所有権を示す場合 (人々が一般的に行うように)、ptr の所有権を関数に譲渡したい場合にのみ auto_ptr を関数に渡す必要があります。値による auto_ptr:
void DoSomething(auto_ptr<int> a)
したがって、DoSomething を呼び出すコードは、ptr の所有権を放棄します。
auto_ptr<int> p (new int (7));
DoSomething (p);
// p is now empty.
それ以外の場合は、ptr を値で渡します。
void DoSomething(int* a)
{...}
...
auto_ptr<int> p (new int (7));
DoSomething (p.get ());
// p still holds the ptr.
または、参照先のオブジェクトに参照を渡します。
void DoSomething(int& a)
{...}
...
auto_ptr<int> p (new int (7));
DoSomething (*p);
// p still holds the ptr.
DoSomething がオブジェクトを削除しようとする可能性が低いことをより明確にするため、通常は 2 番目の方法が推奨されます。