【问题标题】:Will STL deque pop_front() automatically recycle memory?STL deque pop_front() 会自动回收内存吗?
【发布时间】:2012-07-18 05:43:51
【问题描述】:

我有一个程序,我在其中收集一些数据并将它们临时存储在双端队列中

    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 向量分配内存。 deque pop_front 函数会自动回收内存吗?还是我需要放

    delete [] data[0]

之前

    data.pop_front();

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

【问题讨论】:

    标签: c++ memory-leaks stl vector deque


    【解决方案1】:

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

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

    请注意,当您调用new 时,您没有使用[],因此请使用不带方括号的普通delete

    【讨论】:

      猜你喜欢
      • 2012-10-25
      • 1970-01-01
      • 2019-04-23
      • 1970-01-01
      • 2012-09-24
      • 1970-01-01
      • 2011-11-26
      • 1970-01-01
      • 2021-09-30
      相关资源
      最近更新 更多