返回vector <auto_ptr <t>&gt;?</auto_ptr <t>是否安全

时间:2012-10-11 08:46:22

标签: c++ vector auto-ptr

  

可能重复:
  Why is it wrong to use std::auto_ptr<> with standard containers?

我有一个函数在指针中返回一些Object,所以我使用:

vector <auto_ptr <Object> > func() { ... }

我想知道它是否安全?

1 个答案:

答案 0 :(得分:0)

stl喜欢复制元素并在其算法中使用临时副本(例如,它们必须是“可复制构造”和“可分配”)。虽然auto_ptr不是这样。将一个auto_ptr分配给另一个转移指针的所有权。

auto_ptr<foo> A = B; B变为NULL,A是指针的新所有者,B无法使用。当临时对象获得所有权时,它不会返回它,而是你有一个悬空指针或NULL指针的向量。

您可以使用c ++ 11智能指针,或者提升智能指针或自行实现。