do on exit
От: B0FEE664  
Дата: 28.03.13 14:29
Оценка:
Макросы не предлагать.

Что лучше variant 1 или 2?
И вообще, что бы вы сказали увидев это в проекте?

class A
{
  int m_n;
public:
  A(int n) : m_n(n) {}

  void f()
  { 
    if ( 0 == m_n )
      throw std::runtime_error("zero here");
    
    std::cout << m_n << std::endl;
  }
};


int main()
{
  boost::shared_ptr< std::list<A> > pList(new std::list<A>);

  pList->push_back(A(1));
  pList->push_back(A(2));
  pList->push_back(A(3));
  pList->push_back(A(4));
  pList->push_back(A(0));
  pList->push_back(A(5));

  void* pNull = NULL;

  while(pList->size())
  {
    try
    {
      A& rA = pList->front();
      //boost::shared_ptr< std::list<A> > OnExit(pList.get(), boost::mem_fn(&std::list<A>::pop_front)); // variant 1
      boost::shared_ptr<void> OnExit(pNull, boost::bind(&std::list<A>::pop_front, pList));              // variant 2
      
      rA.f();
    }
    catch(std::exception& e)
    {
      std::cout << "Error: " << e.what() << std::endl;
    }
  }

  std::cout << "Press any key to exit..." << std::endl;
  char ch = getch();
  
  return 0;
}

);

pList-
И каждый день — без права на ошибку...
exit shared_ptr bind
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.