is the following function OK:
void DoSomething(auto_ptr< … >& a)....
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With