C++中利用析构机制正确保护现场

发布时间:2009年08月31日      浏览次数:750 次
前段时间改错,碰到由于嵌套调用,重复调用一段有状态的代码,而因为没有正常保存现场,而导致外层调用的状态变更而出错。
   此时,显然需要保护现场。
   保存状态好办,但恢复状态的代码却有点小问题,到底放在哪里比较合适呢?因为程序有可能发生异常而抛出。也就是程序出口不确定。
   此时可以采用类的析构来实现,让编译器来帮我们完成正确的恢复,达到代码清浙且无误。
  如下是简单示例:
  保护类:
  class CProtect
  {
   //用于暂存的变量
   long m_bak;
   ……
  public:
   CProtect(ProtectIns * pIns)
   {
   m_bak = pIns->getStatus();
   ……
   }
   ~CProtect()
   {
   pIns->setStatus(m_bak);
   ……
   }
  }
  使用方法:
   {
   CProtect protect(pA);
   ……
   }
   Java中没有析构机制,不能用此法。
   当然,本身存在这种嵌套调用而共用状态值的情况,是一种不好设计造成,但俺是改错,没时间给我完全重构代码,只能如此。
   这也算C++有析构的好处之一吧,嘿。
免责声明:本站相关技术文章信息部分来自网络,目的主要是传播更多信息,如果您认为本站的某些信息侵犯了您的版权,请与我们联系,我们会即时妥善的处理,谢谢合作!