0

可以将指向 auto_ptr(s) 的指针存储在 std::vector 中吗?安全吗?

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

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

4

2 回答 2

4

您不能将 aauto_ptr本身存储在 a 中std::vector,但存储一个普通指针很好,即使它指向的东西a auto_ptr

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

如果您想将堆分配的对象安全地存储在向量中,您可以使用std::tr1::shared_ptr而不是auto_ptr,或使用 Boost 的指针容器。或者,如果您使用的是 C++11,除了它在容器中使用是安全的之外,其他std::unique_ptr情况类似。std::auto_ptr

于 2012-01-28T01:47:44.123 回答
0

是的,你可以——但它完全不安全,并且会做各种让你吃惊的意想不到的事情。

如果您想将智能指针存储在容器中,请查看 unique_ptr 如果您的编译器支持 C++11 的东西

于 2012-01-28T01:46:54.937 回答