前段时间改错,碰到由于嵌套调用,重复调用一段有状态的代码,而因为没有正常保存现场,而导致外层调用的状态变更而出错。
此时,显然需要保护现场。
保存状态好办,但恢复状态的代码却有点小问题,到底放在哪里比较合适呢?因为程序有可能发生异常而抛出。也就是程序出口不确定。
此时可以采用类的析构来实现,让编译器来帮我们完成正确的恢复,达到代码清浙且无误。
如下是简单示例:
保护类:
class CProtect
{
//用于暂存的变量
long m_bak;
……
public:
CProtect(ProtectIns * pIns)
{
m_bak = pIns->getStatus();
……
}
~CProtect()
{
pIns->setStatus(m_bak);
……
}
}
使用方法:
{
CProtect protect(pA);
……
}
Java中没有析构机制,不能用此法。
当然,本身存在这种嵌套调用而共用状态值的情况,是一种不好设计造成,但俺是改错,没时间给我完全重构代码,只能如此。
这也算C++有析构的好处之一吧,嘿。