C++ 入门 5 版:shared_ptr 的容器

C++ primer 5 edition: Container of shared_ptr

再次阅读C++ Primer 5 Edition。我在第 12 章动态内存。一切都好。直到本书的这一点:

“因为直到最后一个 shared_ptr 消失才会释放内存,所以确保 shared_ptr 不再存在后 needed.The 可能很重要] 程序将正确执行,但如果您忽略销毁 shared_ptrs 程序可能不会浪费内存=28=]s 在一个容器中,然后重新排序容器,这样你就不需要所有的 elements.You 应该确保在你不再需要这些元素时删除 shared_ptr 元素。

备注

如果您将 shared_ptrs 放入一个容器中,随后您需要使用其中的一些元素,但不是全部元素,请记住删除您不再需要的元素。"

本质上就是说,只要你的容器中有一个std::shared_ptr对象,它指向的对象就不会被删除。

因此,一旦您不再使用该对象,您应该从容器中删除相应的 std::shared_ptr,以便释放存储空间。

如果您要继续向容器中添加元素并且从不删除任何元素,那么您实际上会泄漏内存(当然,当引用计数达到 0 时它将被清理,但在此之前它会无缘无故地保留)。


旁注,请确保您在使用 std::shared_ptr 时始终考虑。通常一个 std::unique_ptr 就足够了,如果需要共享它很容易做到。 参见

还有

https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rr-unique