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

Will STL deque pop_front() automatically recycle memory?

本文关键字:内存 pop deque front STL      更新时间:2023-10-16

我有一个程序,在其中我收集一些数据并将它们临时存储在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, "%lft", data[0]->at(i) );
        }
    fprintf(fPtr,"n");
    data.pop_front();
    }

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

    delete [] data[0]

之前

    data.pop_front();

此外,如果data是一个向量而不是一个deque,那么一切都会一样吗?谢谢

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

如果您更改为std::deque<floatvector>或像std::shared_ptr这样的智能指针容器,就可以避免内存泄漏。

请注意,在调用new时没有使用[],所以使用不带方括号的普通delete