c++ - Std::deque does not release memory until program exits -


on linux, std::deque not release memory until program exits. complete code below. appreciated!

#include <deque> #include <vector> #include <string> #include <iostream> #include <boost/shared_ptr.hpp> #include <queue> #include <list> #include <cstdio> #include <cstdlib>  typedef  boost::shared_ptr<std::vector<int> > vecptr; typedef  std::deque< vecptr  > queuetype;   char buf[1024];  char line[1024];   int main()  {    {      int v=0;     queuetype  deq;     for(int i=0; i<30;++i)     for(int j=0; j<1000;++j)     for(int k=0;k<1000;++k)     {        vecptr p( new std::vector<int>);        deq.push_back(p);     }      std::cout<<"done increasing deq:deq size="<<deq.size()<<std::endl;     sleep(20);      std::cout<<"start decreasing deq size"<<std::endl;     while(deq.size()>0)     {       deq.pop_front();     }     std::cout<<"done decreasing deq size,deq size="<<deq.size()<<std::endl;   }   std::cin.getline(line,sizeof(line));   return 0; } 

that correct, pop_front() not deallocate storage allocated push_back() if want deallocate before program ends, can end lifetime of object. if want deallocate before lifetime of object ends, consider using "shrink-to-fit" idiom c++ container classes.

queuetype().swap (deq); // c++98 deq.shrink_to_fit(); // c++11 

Comments