| 订阅 | 在线投稿
分享
 
 
 

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

来源:互联网网民  宽屏版  评论
2006-12-16 17:29:01

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

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

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

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

如下是简单示例:

保护类:

class CProtect

{

//用于暂存的变量

long m_bak;

……

public:

CProtect(ProtectIns * pIns)

{

m_bak = pIns->getStatus();

……

}

~CProtect()

{

pIns->setStatus(m_bak);

……

}

}

使用方法:

{

CProtect protect(pA);

……

}

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

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

这也算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- 王朝网络 版权所有