可以将指向 auto_ptr(s) 的指针存储在 std::vector 中吗?安全吗?
我列举了一个读取 XML 文件的文件夹,并使用 auto_ptr 为每个文件夹创建一个对象。我事先不知道会有多少 XML 文件,我想使用一个向量来基本上保留指向它们的指针列表。
我还假设当从向量中删除指针(或向量被销毁)时,指针几乎消失了,所以我不必担心将它们设置为 NULL。
可以将指向 auto_ptr(s) 的指针存储在 std::vector 中吗?安全吗?
我列举了一个读取 XML 文件的文件夹,并使用 auto_ptr 为每个文件夹创建一个对象。我事先不知道会有多少 XML 文件,我想使用一个向量来基本上保留指向它们的指针列表。
我还假设当从向量中删除指针(或向量被销毁)时,指针几乎消失了,所以我不必担心将它们设置为 NULL。
您不能将 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
是的,你可以——但它完全不安全,并且会做各种让你吃惊的意想不到的事情。
如果您想将智能指针存储在容器中,请查看 unique_ptr 如果您的编译器支持 C++11 的东西