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 放入一个容器中,随后您需要使用其中的一些元素,但不是全部元素,请记住删除您不再需要的元素。"
- 我不明白这一段,有人可以向我解释一下
shared_ptr
s 是如何泄漏的吗?以及可能导致泄漏的 "container" 或 shared_ptr 的示例。谢谢。
本质上就是说,只要你的容器中有一个std::shared_ptr
对象,它指向的对象就不会被删除。
因此,一旦您不再使用该对象,您应该从容器中删除相应的 std::shared_ptr
,以便释放存储空间。
如果您要继续向容器中添加元素并且从不删除任何元素,那么您实际上会泄漏内存(当然,当引用计数达到 0 时它将被清理,但在此之前它会无缘无故地保留)。
旁注,请确保您在使用 std::shared_ptr
时始终考虑。通常一个 std::unique_ptr
就足够了,如果需要共享它很容易做到。
参见
还有
https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rr-unique
再次阅读C++ Primer 5 Edition。我在第 12 章动态内存。一切都好。直到本书的这一点:
“因为直到最后一个 shared_ptr 消失才会释放内存,所以确保 shared_ptr 不再存在后 needed.The 可能很重要] 程序将正确执行,但如果您忽略销毁 shared_ptrs 程序可能不会浪费内存=28=]s 在一个容器中,然后重新排序容器,这样你就不需要所有的 elements.You 应该确保在你不再需要这些元素时删除 shared_ptr 元素。
备注
如果您将 shared_ptrs 放入一个容器中,随后您需要使用其中的一些元素,但不是全部元素,请记住删除您不再需要的元素。"
- 我不明白这一段,有人可以向我解释一下
shared_ptr
s 是如何泄漏的吗?以及可能导致泄漏的 "container" 或 shared_ptr 的示例。谢谢。
本质上就是说,只要你的容器中有一个std::shared_ptr
对象,它指向的对象就不会被删除。
因此,一旦您不再使用该对象,您应该从容器中删除相应的 std::shared_ptr
,以便释放存储空间。
如果您要继续向容器中添加元素并且从不删除任何元素,那么您实际上会泄漏内存(当然,当引用计数达到 0 时它将被清理,但在此之前它会无缘无故地保留)。
旁注,请确保您在使用 std::shared_ptr
时始终考虑。通常一个 std::unique_ptr
就足够了,如果需要共享它很容易做到。
参见
还有
https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rr-unique