Я могу передать auto_ptr в отношении функций?

следующая функция хорошо:

void DoSomething(auto_ptr< … >& a)....
7
задан Potatoswatter 21 March 2010 в 12:07
поделиться

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 вряд ли попытается удалить объект.

17
ответ дан 6 December 2019 в 11:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: