假设我有一个循环:
for(int i = 0; i < 1000; i++)
{
vector<int> table(100000, 0);
int result = some_function(&table);
// ...
}
在每个循环周期中是否释放了前一个“table”实例的内存?
答案 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);
// ...
}