is the following function OK:
void DoSomething(auto_ptr< … >& a)....
is the following function OK:
void DoSomething(auto_ptr< … >& a)....
Yes you can. But this isn't a very good question. Are you having problems? What are you doing with the the pointer in the function? All your questions here tend to show a similar reluctance to provide sufficient information for us to provide good answers.
And whether you should be using auto_ptrs in the first place is another issue.
You can do it but I'm not sure why you would want to do it.
If you're using the auto_ptr to indicate ownership of the ptr (as people generally do), then you only need to pass the auto_ptr to a function if you want to transfer ownership of the ptr to the function, in which case you would pass the auto_ptr by value:
void DoSomething(auto_ptr<int> a)
So any code calling DoSomething relinquishes ownership of the ptr:
auto_ptr<int> p (new int (7));
DoSomething (p);
// p is now empty.
Otherwise just pass the ptr by value:
void DoSomething(int* a)
{...}
...
auto_ptr<int> p (new int (7));
DoSomething (p.get ());
// p still holds the ptr.
or pass a ref to the pointed to object:
void DoSomething(int& a)
{...}
...
auto_ptr<int> p (new int (7));
DoSomething (*p);
// p still holds the ptr.
The second is usually preferable as it makes it more explicit that DoSomething is unlikely to attempt to delete the object.