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

王朝c/c++·作者佚名  2006-12-16
窄屏简体版  字體: |||超大  

前段时间改错,碰到由于嵌套调用,重复调用一段有状态的代码,而因为没有正常保存现场,而导致外层调用的状态变更而出错。

此时,显然需要保护现场。

保存状态好办,但恢复状态的代码却有点小问题,到底放在哪里比较合适呢?因为程序有可能发生异常而抛出。也就是程序出口不确定。

此时可以采用类的析构来实现,让编译器来帮我们完成正确的恢复,达到代码清浙且无误。

如下是简单示例:

保护类:

class CProtect

{

//用于暂存的变量

long m_bak;

……

public:

CProtect(ProtectIns * pIns)

{

m_bak = pIns->getStatus();

……

}

~CProtect()

{

pIns->setStatus(m_bak);

……

}

}

使用方法:

{

CProtect protect(pA);

……

}

Java中没有析构机制,不能用此法。

当然,本身存在这种嵌套调用而共用状态值的情况,是一种不好设计造成,但俺是改错,没时间给我完全重构代码,只能如此。

这也算C++有析构的好处之一吧,嘿。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有  導航