c++ - 在 vector 中存储指向 auto_ptr 的指针

标签 c++ vector containers auto-ptr

能否在 std::vector 中存储指向 auto_ptr(s) 的指针?安全吗?

我枚举了一个读取 XML 文件的文件夹,并使用 auto_ptr 为每个文件创建了一个对象。我事先不知道会有多少 XML 文件,我想使用一个 vector 来保存指向它们的指针列表。

我还假设当指针从 Vector 中删除(或 vector 被销毁)时,指针几乎消失了,所以我不必担心将它们设置为 NULL。

最佳答案

您不能将 auto_ptr 本身存储在 std::vector 中,但存储普通指针没问题,即使它指向的东西 是一个 auto_ptr

不过,我不明白您为什么要这样做。 auto_ptr 的全部要点是确保堆分配的对象在超出范围时被自动删除。如果必须手动删除 auto_ptr 本身,您将失去该优势。

如果你想在一个 vector 中安全地存储堆分配的对象,你可以使用std::tr1::shared_ptr而不是auto_ptr,或者使用Boost的指针容器.或者,如果您使用的是 C++11,std::unique_ptrstd::auto_ptr 类似,只是它在容器中使用是安全的。

关于c++ - 在 vector 中存储指向 auto_ptr 的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9042263/

相关文章:

c++ - 几个小 std::vectors 的连续内存分配?

java - Java中并发写入时如何通过异常发出关于 'retry exceeded'的信号?

twitter-bootstrap - Bootstrap 响应容器宽度

c++ - OpenCV - 带面具的 absdiff

c++ - VCRedist - 如何判断它是否已运行?

c++ - 具有 n 个参数的宏

c++ - 如何从 qml 访问 qabstractlistmodel 派生类对象作为另一个类的属性?

python - 使用向量作为索引对 numpy 矩阵进行切片

docker - 是否可以将 redis 容器附加到 docker 卷?

c++ - 顺时针和逆时针旋转数组的有效方法