1

可能重复:
为什么将 std::auto_ptr<> 与标准容器一起使用是错误的?

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

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

我想知道它是否安全?

4

1 回答 1

0

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

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

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

于 2012-10-11T08:57:47.317 回答