首页 > 解决方案 > C++ 入门 5 版:shared_ptr 的容器

问题描述

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

“因为在最后一个 shared_ptr 消失之前内存不会被释放,因此确保 shared_ptr 在不再需要后不会留下来很重要。程序将正确执行,但如果您忽略破坏 shared_ptr 可能会浪费内存程序不需要。shared_ptrs 在您需要它们后可能会保留的一种方法是,如果您将 shared_ptrs 放入容器中,然后重新排序容器,这样您就不需要所有元素。您应该确保删除 shared_ptr 元素一次您不再需要这些元素。

笔记

如果您将 shared_ptrs 放入容器中,并且随后需要使用部分但不是全部元素,请记住删除不再需要的元素。”

标签: c++11containersshared-ptr

解决方案


这本质上意味着只要std::shared_ptr您的容器中有一个对象,它指向的对象就不会被删除。

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

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


旁注,请确保您始终考虑使用std::shared_ptr. 通常一个std::unique_ptr就足够了,如果需要让它共享它很容易做到这一点。请参阅C++11 unique_ptr 和 shared_ptr 是否能够转换为彼此的类型?

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


推荐阅读