将原始指针向量清除给由独特指针拥有的对象

Clearing a vector of raw pointers to objects owned by unique pointers

本文关键字:指针 拥有 对象 原始 向量 清除      更新时间:2023-10-16

我想知道最好的方法是清除原始指针的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自动摧毁了房屋(人和动物)。

矢量量的载体仍然存在,但充满了悬空的指针。然后清除它成为一个好主意。但是,它没有立即的危害。在之前或之后清除它不会影响人民或动物的寿命,因为这只是一组笔记,说明动物在结构化的桌子中。