C ++:是为循环内声明的变量释放的内存

时间:2012-03-24 21:59:34

标签: c++ memory memory-management

假设我有一个循环:

for(int i = 0; i < 1000; i++)
{
    vector<int> table(100000, 0);
    int result = some_function(&table);
    // ...
}

在每个循环周期中是否释放了前一个“table”实例的内存?

4 个答案:

答案 0 :(得分:3)

取决于“释放内存”的含义。

在每次迭代结束时,将调用向量的析构函数,因此将调用每个包含元素的析构函数。因此,您没有内存泄漏(如果这是您的担忧)。

但内存是否返回操作系统是一个不同的问题;这是特定于实现的。至少涉及两个抽象级别,容器分配器,以及下面的标准new / delete实现。

答案 1 :(得分:0)

是; vector在每次迭代时被销毁(并在每次迭代时创建)。

答案 2 :(得分:0)

是的,vector的析构函数将释放内存。

答案 3 :(得分:0)

我会做这样的事情。这样,内存只保留一次,但vector的值为0:

size_t vector_size = 100000;
vector<int> table(vector_size);
for(int i = 0; i < 1000; ++i)
{
    memset( &table[0], 0, table.size() * sizeof(int) );
    int result = some_function(&table);
    // ...
}