2012-07-19 268 views
1

我有,我收集了一些數據的程序,並將它們在一個deque臨時存儲STL deque pop_front()會自動回收內存嗎?

typedef vector<float> floatVector; 
    ... 
    floatVector * currRecord; 
    deque<floatVector *> data; 
    ... 
    ... 

    for (...) 
    { 
     ... 
     currRecord = new floatVector(10); 
     data.push_back(currRecord); 
    } 

後來,我想將數據保存到文件

while (data.size() > 0) 
    { 
     for (int i=0; i < 10; i++) 
     { 
      fprintf(fPtr, "%lf\t", data[0]->at(i)); 
     } 
    fprintf(fPtr,"\n"); 
    data.pop_front(); 
    } 

所以,我的問題是,這程序導致內存泄漏?我使用new運算符爲每個currRecord向量分配內存。 012que函數會自動回收內存嗎?或者我需要把

delete [] data[0] 

data.pop_front(); 

過嗎?另外,如果data是一個向量而不是一個deque,那麼每件事都會一樣嗎?謝謝!

回答

6

指針有一個std::deque,每個指針擁有一個資源(內存)。調用pop_front()將從容器中移除指針,但不釋放指針所擁有的內存。由於您使用new分配內存,因此您還必須致電delete。如果容器是std::vector,情況不變。

如果更改爲std::deque<floatvector>或智能指針容器如std::shared_ptr,則可以避免內存泄漏。

請注意,當您調用new時,您沒有使用[],因此請使用不帶方括號的普通delete

+0

謝謝!這回答了我的問題。 – 2012-07-19 14:10:56