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

    前段时间改错,碰到由于嵌套调用,重复调用一段有状态的代码,而因为没有正常保存现场,而导致外层调用的状态变更而出错。
    此时,显然需要保护现场。
    保存状态好办,但恢复状态的代码却有点小问题,到底放在哪里比较合适呢?因为程序有可能发生异常而抛出。也就是程序出口不确定。
    此时可以采用类的析构来实现,让编译器来帮我们完成正确的恢复,达到代码清浙且无误。

如下是简单示例:
保护类:
class CProtect
{
    //用于暂存的变量
    long m_bak;
    ……
public:
    CProtect(ProtectIns * pIns)
    {
        m_bak = pIns->getStatus();
        ……
    }
    ~CProtect()
    {
        pIns->setStatus(m_bak);
        ……
    }        
}

使用方法:
    {
        CProtect protect(pA);
        ……
    }

    Java中没有析构机制,不能用此法。
    当然,本身存在这种嵌套调用而共用状态值的情况,是一种不好设计造成,但俺是改错,没时间给我完全重构代码,只能如此。
    这也算C++有析构的好处之一吧,嘿。

石头 于2005-11-16

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值