Могу ли я передать auto_ptr по ссылке на функции?
В порядке ли следующая функция:
void DoSomething(auto_ptr< … >& a)....
1 ответ
Вы можете сделать это, но я не уверен, почему вы хотели бы сделать это.
Если вы используете auto_ptr для указания владельца ptr (как обычно делают люди), вам нужно только передать auto_ptr в функцию, если вы хотите передать владение 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 вряд ли попытается удалить объект.