gpt4 book ai didi

c++ - 如果我从 C++ 中的嵌套映射/集合中删除一个元素,是否会出现内存泄漏?

转载 作者:行者123 更新时间:2023-11-30 03:31:21 31 4
gpt4 key购买 nike

我正在尝试删除 unordered_set<int>来自unordered_map<int, unordered_set<int>> .

unordered_set<int> 会发生什么在我从 unordered_map 中删除它之后?会不会还留在内存中,从而造成内存泄漏?如果是,我应该怎么做才能将它从内存中完全删除?

我尝试了以下代码。

#include <iostream>
#include <unordered_map>
#include <unordered_set>

using namespace std;

unordered_map<int, unordered_set<int>> mp;

int main()
{
mp[0] = unordered_set<int>();
mp[0].insert(1);
mp[0].insert(2);

unordered_set<int>& st = mp[0];
cout << st.size() << endl;
mp.erase(0);
cout << st.size() << endl;

return 0;
}

输出的是2和0,貌似unordered_set里面的元素被去掉了,但是unordered_set本身呢?是否还停留在内存中?

最佳答案

不,它不会留在内存中。将调用析构函数并释放内存。在这方面,unordered_set 对象与您可能想要放入 STL 容器中的任何其他对象没有什么不同。

参见 documentationstd::unordered_map::erase 上:

This effectively reduces the container size by the number of elements removed, calling each element's destructor.

关于c++ - 如果我从 C++ 中的嵌套映射/集合中删除一个元素,是否会出现内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44246271/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com