我注意到,当我使用无序集unordered_set<int> theSet;容纳大量整数时,即使调用clear()或rehash(0),它也不会释放内存。即使我在函数中本地定义了集合,并且函数执行完毕,该集合保留的大部分内存仍然保留。有任何想法吗?

下面是一个示例代码,当测试器函数返回并且我们位于主存储器时
测试人员使用的未释放

谢谢

using namespace std;
using std::tr1::unordered_set;

void tester() {
    mySet.rehash(x);
    for (int i = 0; i < 10000000; i++)
        mySet.insert(i);

    mySet.clear();
}

int main() {
    tester();
    return 0;
}

最佳答案

您可以使用临时集swap

std::unordered_set<MyType> mySet;

// do stuff with mySet

std::unordered_set<MyType>().swap( mySet );


但是您的第二个主张没有任何意义。如果已声明某个函数本地的集合,则该函数退出时将释放该集合使用的所有内存。

关于c++ - unordered_set c++,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13611800/

10-11 22:53