在向量中存储指向auto_ptr的指针

时间:2012-01-28 01:42:56

标签: c++ vector containers auto-ptr

可以在std :: vector中存储指向auto_ptr的指针吗?这样安全吗?

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

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

2 个答案:

答案 0 :(得分:4)

你不能将auto_ptr本身存储在std::vector中,但存储普通指针很好,即使它指向 的东西是{{1 }}

但是,我不明白你为什么要那样做。 auto_ptr的重点是确保堆分配的对象在超出范围时自动删除。如果必须手动删除auto_ptr本身,则会失去这种好处。

如果要将堆分配的对象安全地存储在向量中,可以使用auto_ptr而不是std::tr1::shared_ptr,或使用Boost的指针容器。或者,如果您使用的是C ++ 11,auto_ptrstd::unique_ptr类似,只不过在容器中使用它是安全的。

答案 1 :(得分:0)

是的,你可以 - 但它完全不安全,会做各种令你惊讶的意想不到的事情。

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