我想知道最好的方法是清除原始指针的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自动摧毁了房屋(人和动物)。
矢量量的载体仍然存在,但充满了悬空的指针。然后清除它成为一个好主意。但是,它没有立即的危害。在之前或之后清除它不会影响人民或动物的寿命,因为这只是一组笔记,说明动物在结构化的桌子中。