将STL的deque pop_front()自动回收内存?(Will STL deque pop_f

2019-09-19 18:31发布

我有我收集了一些数据的程序,并将它们在一个deque临时存储

    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载体。 将双端队列pop_front功能自动回收内存? 或者我需要把

    delete [] data[0]

之前

    data.pop_front();

? 此外,如果data是一个矢量,而不是一个deque,将一切都一样吗? 谢谢!

Answer 1:

你有一个std::deque指针,每个指针拥有的资源(内存)。 调用pop_front()会从容器中取出一个指针,但它不释放指针拥有的内存。 既然你分配的内存new ,你还必须调用delete 。 这种情况不改变,如果容器是一个std::vector

如果你改变了一个你可能避免内存泄漏std::deque<floatvector>或类似的智能指针的容器std::shared_ptr

请注意,您没有使用[]当你被称为new所以使用普通的delete方括号。



文章来源: Will STL deque pop_front() automatically recycle memory?