C++ 队列中pop()上的内存浪费

C++ 队列中pop()上的内存浪费,c++,memory-management,queue,C++,Memory Management,Queue,我想问一下在调用queue.pop()时内存是否被释放? 因为在堆栈中,我们只是增加或减少指针,但内存仍然没有释放 问题是:WAP打印大日志文件的最后n行。 我正在队列中保存行,然后在计数>n时弹出行 这是一种很好的编码实践吗? 如果没有,可以做些什么来释放内存 我编码的是: #include<iostream> #include<queue> #include<fstream> using namespace std; void lastN(char *f

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

问题是:WAP打印大日志文件的最后n行。
我正在队列中保存行,然后在计数>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;
}    
#包括
#包括
#包括
使用名称空间std;
void lastN(字符*文件名,int N)
{
队列q;
整数计数=0;
弦线;
ifstream-mf(文件名);
if(mf.is_open())
{
而(!mf.eof())
{
getline(mf,line);
计数++;
q、 推(线);
如果(计数>N)q.pop();
}
mf.close();
}

否则您的
队列
将按值保存
字符串
对象,因此调用
pop
将销毁字符串并释放与其相关的内存。

谢谢。您说过“队列按值保存字符串对象”。你的意思是,如果队列持有指向对象的指针,那么它不会被释放吗?是的,没错。如果队列持有原始指针,那么内存不会被释放。但是使用智能指针也会释放内存。
std::queue
在你的情况下,这是不必要的开销。