队列中pop()的内存浪费

时间:2013-07-24 14:36:08

标签: c++ memory-management queue

我想问一下当调用queue.pop()时是否释放内存? 因为在堆栈中我们只是增加或减少指针但内存仍然没有被释放。

问题是:WAP打印一个大日志文件的最后n行     我在队列中保存行,然后在count> n。

时弹出行

这是一个很好的编码实践吗? 如果不能解除分配内存可以做什么?

我编码的是:

#include<iostream>
#include<queue>
#include<fstream>
using namespace std;

void lastN(char *fileName, int N)
{
   queue<string> q;
   int count=0;
   string line;
   ifstream mf(fileName);
   if(mf.is_open())
   {
      while(!mf.eof())
      {
         getline(mf,line);
         count++;
         q.push(line);
         if(count>N)q.pop();
      }
      mf.close();
   }
   else cout<<"cannot open file\n";
   count=1;
   while(q.size())
   {
      printf("line no %2d :: ",count++);
      cout<<q.front()<<endl;
      q.pop();
   }
   cout<<endl;
}

int main(void )
{
   char *fileName="file.txt";
   ofstream mf(fileName);
   if(mf.is_open())
   {
      mf<<"line 0";
      mf<<"line 1\nline 2\nline 3\nline 4\n\n\n";
      mf.close();
   }
   else cout<<"cannot create file\n";
   lastN(fileName,5);
   getchar();
   return 0;
}    

1 个答案:

答案 0 :(得分:0)

您的queue按值保留string个对象,因此调用pop会破坏字符串并释放与之关联的内存。