2012-03-24 89 views
0

可以说,内声明释放该变量的内存我有一个循环:C++:在循环

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

是以前的“表”实例的内存中的每个循环周期被释放?

回答

0

是;每次迭代都会销毁vector(并在每次迭代中创建)。

0

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

3

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

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

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

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); 
    // ... 
} 
+0

的'memset'不是必要的,因为矢量构造器将intialize重视其元素。 – 2012-03-24 23:12:23

+0

@Jesse:不,它调用默认的构造函数。结果是未定义的。还有一个原因:这种方式数组在第二个循环中也是NULL。 – Naszta 2012-03-27 17:57:46