unordered_map<int, unordered_set<int>>
からunordered_set<int>
を削除しようとしています。C++でネストされたマップ/セットから要素を削除するとメモリリークが発生しますか?
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;
}
unordered_set自体についての出力は2で、0はunordered_setの要素が削除されているようだが、何?まだそれは記憶に残っていますか?
あなたはそれを考えすぎています。標準的なコンテナがあなたのためにメモリを管理します。ここで間違っているのは、ぶら下がっている参照であり、その使用は未定義の動作です。 – DeiDei