可以说,内声明释放该变量的内存我有一个循环:C++:在循环
for(int i = 0; i < 1000; i++)
{
vector<int> table(100000, 0);
int result = some_function(&table);
// ...
}
是以前的“表”实例的内存中的每个循环周期被释放?
可以说,内声明释放该变量的内存我有一个循环:C++:在循环
for(int i = 0; i < 1000; i++)
{
vector<int> table(100000, 0);
int result = some_function(&table);
// ...
}
是以前的“表”实例的内存中的每个循环周期被释放?
是;每次迭代都会销毁vector
(并在每次迭代中创建)。
是的,矢量的析构函数将释放内存。
取决于“内存释放”的含义。
在每次迭代结束时,调用vector的析构函数,因此调用每个包含元素的析构函数。所以你没有内存泄漏(如果这是你的担忧)。
但是,内存是否返回到操作系统是一个不同的问题;这是特定于实现的。至少涉及两个抽象级别,容器分配器,以及其下的标准实现。
我会做这样的事情。以这种方式,存储器被保留只是一次,但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);
// ...
}
的'memset'不是必要的,因为矢量构造器将intialize重视其元素。 – 2012-03-24 23:12:23
@Jesse:不,它调用默认的构造函数。结果是未定义的。还有一个原因:这种方式数组在第二个循环中也是NULL。 – Naszta 2012-03-27 17:57:46