我不能使用auto_ptr的std :: vector - 我应该使用shared_ptr吗?

时间:2010-03-15 10:56:56

标签: c++ shared-ptr

我真的不需要共享对象,但我确实希望确保不会发生内存泄漏。 在这种情况下使用shared_ptr是否正确?

4 个答案:

答案 0 :(得分:7)

如果您使用提升,boost::ptr_vector可能更适合您的需求。

如果没有,那么您可以按照建议使用shared_ptr,也可以在完成后手动删除矢量元素。

从维护的角度来看,shared_ptr将是首选解决方案。但请注意,shared_ptr可能会带来一些性能损失,这可能会对您的应用产生重大影响。

答案 1 :(得分:4)

如果低级性能/内存使用不是关键要求(即所有情况的97%),那么只需使用shared_ptr。它很简单,也很容易理解。

如果你真的想要保持紧张和/或更准确地表达所有权意图,那么boost::ptr_vector可能会更好 - 但如果你的班级没有管理任何其他内存,那么只需在你的析构函数中手动删除我们有时会相信这是一个很大的罪恶;-)我是RAII的主要支持者,但仍然不时这样做。

答案 2 :(得分:2)

这有点过分,但没有更好的智能指针。你也可以考虑使用boost的指针容器。

在C ++ 0x中,您可以将std::unique_ptr存储在容器中,这更接近您的需求。

答案 3 :(得分:1)

您也可以使用Boost.PointerContainer。使用shared_ptr表示共享所有权。现在,如果您确定,您的对象绑定到容器的生命周期,那么PointerContainer是设计明智的更好选择(即使是一个单词?)。