5

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

4

4 回答 4

7

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

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

从维护的角度来看,shared_ptr将是首选的解决方案。但是请注意,shared_ptr这可能会带来一些性能损失,这可能对您的应用程序很重要,也可能不重要。

于 2010-03-15T11:04:46.820 回答
4

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

如果您真的想保持紧凑和/或更准确地表达所有权意图,那么boost::ptr_vector可能会更好 - 但是如果您的类不管理任何其他内存,那么只需在析构函数中手动删除就不是那么大的罪过正如我们有时被引导相信的那样;-) 我是 RAII 的大力支持者,但仍然不时这样做。

于 2010-03-15T11:27:04.093 回答
2

这有点矫枉过正,但没有比这更好的智能指针了。你也可以考虑 boost 的指针容器。

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

于 2010-03-15T11:04:58.720 回答
1

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

于 2010-03-15T11:05:18.863 回答