将auto_ptr有效地传递给函数使其成为一个接收器.为什么?

Fre*_*die 5 c++ auto-ptr

我正在阅读有关共享指针的一些注释.他们说STL与auto_ptr的第一次尝试有以下主要缺点:

  • 它们不能用于STL容器中
  • 复制auto_ptr会转移所有权
  • 将auto_ptr有效地传递给函数使其成为一个接收器

我理解前两个,但我不确定最后一个意味着什么.

有人可以解释一下.

谢谢.

Ale*_* C. 10

这是因为一旦将其复制auto_ptr到变量中,就会丧失指向新变量的指针的所有权.

当你有:

void foo(std::auto_ptr<bar> x);
Run Code Online (Sandbox Code Playgroud)

和你打电话fooauto_ptr,你做的副本auto_ptrfoo的使用.这有效地将所有权转移foo,因此指针在foo完成后被删除.

这是一个非常令人惊讶的行为,让我最终停止使用auto_ptr.对于try块内的简单RAII (auto_ptr如书中所述的主要用例),请使用boost::scoped_ptr.


Alo*_*ave 6

基本上,auto_ptr将所有权转移到指定的指针.
传递auto_ptr给函数时,指针的所有权将传递给函数参数中的接收指针.此指针的范围仅限于函数体,因此当函数退出时指针会被删除.

有效使用auto_ptr中阅读它.Herb Sutter很好地和权威地解释了它.