可以在std :: vector中存储指向auto_ptr的指针吗?这样安全吗?
我枚举一个读取XML文件的文件夹,并使用auto_ptr为每个文件创建一个对象。我事先并不知道会有多少XML文件,我想使用一个向量来保存一个指针列表。
我还假设当从Vector中删除指针(或者向量被破坏)时,指针几乎消失了,所以我不必担心将它们设置为NULL。
答案 0 :(得分:4)
你不能将auto_ptr
本身存储在std::vector
中,但存储普通指针很好,即使它指向 的东西是{{1 }}
auto_ptr
的重点是确保堆分配的对象在超出范围时自动删除。如果必须手动删除auto_ptr
本身,则会失去这种好处。
如果要将堆分配的对象安全地存储在向量中,可以使用auto_ptr
而不是std::tr1::shared_ptr
,或使用Boost的指针容器。或者,如果您使用的是C ++ 11,auto_ptr
与std::unique_ptr
类似,只不过在容器中使用它是安全的。
答案 1 :(得分:0)
是的,你可以 - 但它完全不安全,会做各种令你惊讶的意想不到的事情。
如果你想在容器中存储智能指针,如果编译器支持C ++ 11东西,请查看unique_ptr