我可以通过引用函数传递auto_ptr吗?

时间:2010-03-21 09:57:48

标签: c++ smart-pointers auto-ptr

是以下功能OK:

void DoSomething(auto_ptr< … >& a)....

1 个答案:

答案 0 :(得分:17)

你可以做到,但我不确定你为什么要这样做。

如果你使用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.

或将ref传递给指向的对象:

void DoSomething(int& a)
{...}

...

auto_ptr<int> p (new int (7));
DoSomething (*p);
// p still holds the ptr.

第二种通常更可取,因为它更明确地表明DoSomething不太可能尝试删除该对象。