请问STL deque pop_front()会自动回收内存吗?

Liu*_*ing 1 c++ memory-leaks stl vector deque

我有一个程序,我收集一些数据并暂时存储在双端队列中

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

    for (...)
    {
        ...
        currRecord = new floatVector(10); 
        data.push_back(currRecord);
    }
Run Code Online (Sandbox Code Playgroud)

后来,我想将数据保存到文件中

    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();
    }
Run Code Online (Sandbox Code Playgroud)

所以,我的问题是,这个程序会导致内存泄漏吗?我使用new运算符为每个currRecord向量分配内存.deque pop_front功能会自动回收内存吗?或者我需要放

    delete [] data[0]
Run Code Online (Sandbox Code Playgroud)

之前

    data.pop_front();
Run Code Online (Sandbox Code Playgroud)

?另外,如果data是向量而不是双端队列,那么一切都是一样的吗?谢谢!

Bla*_*ace 6

你有一个std::deque指针,每个指针拥有一个资源(内存).调用pop_front()将从容器中删除指针,但它不会释放指针所拥有的内存.由于你分配内存,new你也必须调用delete.如果容器是a,则情况不变std::vector.

如果您更改为std::deque<floatvector>智能指针或容器,则可以避免内存泄漏std::shared_ptr.

请注意,[]在调用时没有使用,new因此请使用delete不带方括号的plain .