将原始指针向量清除给由独特指针拥有的对象
Clearing a vector of raw pointers to objects owned by unique pointers
我想知道最好的方法是清除原始指针的vector
的CC_1,指向unique_ptr
S拥有的对象而没有任何内存泄漏。
要使这个更具体,假设我有:
std::vector<std::unique_ptr<Person>> people;
std::vector<std::unique_ptr<Animal>> animals;
std::vector<std::vector<Animal*>> animalOwnerships;
我知道我可以使用 people.clear()
和 animals.clear()
,它将删除唯一的指针到类对象,而这些指针又会删除类对象(如果我在此处误解,请纠正我)。
如果我首先打电话给这些,那么animalOwnerships
是否包括悬挂的指针?目前可以致电animalOwnerships.clear()
,而无需担心任何内存泄漏,还是应该先调用其他两个?
另外,animalOwnerships
中的单个vectors
是否需要单独清除?
指针就像纸上列出的纸一样。
悬空指针是不存在房屋的地址。
当您拥有房屋的唯一记录是在特定纸上,并且您将其销毁并失去了房屋的踪迹。
一个悬空的指针是不整洁和冒险的,如果有人遵循不好的事情发生,但这不是直接的错误。即使是泄漏也不是直接的错误。
独特的PTR对象是相同的地址 - 相同的写作 - 但写在魔术宝石上。当宝石被摧毁时,房屋也被摧毁。
这使得在不泄漏唯一的PTR的情况下很难泄漏资源。而且,由于资源的所有者很清楚 - 正是独特的PTR-它使得独特的PTR不太可能悬挂,因为每个人都应该知道通过销毁独特的PTR来清理资源(摧毁房屋)(破坏房屋)宝石)。
因此,清除人/动物向量会摧毁独特的PTR(宝石),该PTR自动摧毁了房屋(人和动物)。
矢量量的载体仍然存在,但充满了悬空的指针。然后清除它成为一个好主意。但是,它没有立即的危害。在之前或之后清除它不会影响人民或动物的寿命,因为这只是一组笔记,说明动物在结构化的桌子中。
- 现代 C++ 中作为类成员的非拥有指针
- 谁拥有作为指向 Windows API 函数的指针传递的值?
- 在实现 std::vector 时,我必须拥有 end() 的"end"指针吗?
- 是否可以在标准弱指针之上实现非拥有"slightly smart"指针?
- C++移动拥有指针成员的构造函数
- 我怎么知道谁拥有某个指针
- 将原始指针向量清除给由独特指针拥有的对象
- 如何制作像shared_ptr这样的不拥有指针
- 是否可以拥有一个cv ::垫子,其中包含标量而不是标量的指针
- 拥有功能指针类型是什么意思
- 如果指针已经被删除,指针容器怎么能拥有指针的所有权
- C++ 明确库拥有指针
- 指针是否可能在没有任何数据副本的情况下被向量所拥有
- 将auto_ptr拥有的指针存储在导致崩溃的向量中
- C++11对unique_ptr的非拥有引用/指针
- 让shared_ptr拥有现有指针的更简单方法
- 正在检测对象是否为智能指针所拥有
- 如何在类中拥有函数指针
- 拥有一个具有原始指针访问器的unique_ptr成员是不好的做法吗?
- Rdbuf(..)返回一个指针——谁拥有所指向的缓冲区