c++ - 队列中 pop() 的内存浪费

标签 c++ memory-management queue

我想问一下调用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;
}    

最佳答案

您的 queue 按值保存 string 对象,因此调用 pop 将销毁字符串并释放与其关联的内存。

关于c++ - 队列中 pop() 的内存浪费,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17837150/

相关文章:

c++ - 我如何判断一个元组在 C++ 中是否为空

ios - removeFromSuperview 导致崩溃(非 ARC)

memory-management - ColdFusion JVM 无缘无故地使用内存

java - 迭代器和抛出异常

c++ - 将函数 f(x,y) 作为参数传递给固定的 y

c++ - 如何在 C++ 中打印带有前缀 + 的正数

javascript - (jQuery) .hover() 中淡入/淡出元素的问题

c++ - 内部带有结构的类未实例化(立即出现段错误)

c++ - 错误 Windows header 需要 winnt.h 上的默认打包选项

ios - 在 iOS 上缩小图像尺寸最节省内存的方法是什么?