Chinaunix首页 | 论坛 | 博客
  • 博客访问: 188495
  • 博文数量: 28
  • 博客积分: 1490
  • 博客等级: 上尉
  • 技术积分: 310
  • 用 户 组: 普通用户
  • 注册时间: 2006-10-17 10:01
文章分类
文章存档

2012年(3)

2011年(2)

2008年(2)

2007年(7)

2006年(14)

我的朋友

分类: LINUX

2006-10-26 19:56:50

终于将项目的 undo / redo 的模块对应完毕,松了口气。

以前的实现方式的描述略有不同,在实现中我采取了并不删除实际的实体,而是存储了要删除对象的指针,比如,在删除时,假设实体对象是用链表来存储的,修改前结点的 next 指针指向当前结点的后续。当前结点的指针不要释放,而是作为 undo 的参数存储起来,这样在 undo 时,只用恢复原来的链接状态就 OK 了; redo 的时候还是修改指针。

这样会带来的一个负面的效应是,随着实体对象越来越多,内存的消耗也会增大;

对于删除了对象,而内存并没有释放而带来的这种负面情形,我们可以通过设定栈的大小来解决,当栈增长到最大长度时再做实际的实体删除操作,并释放其对应的内存。

记得当初做 AutoCAD 的开发时,AutoCAD 的实体操作好像也是采用这种方式来做的,他的删除也是只是在当前的数据库中做了一下标记。

阅读(1768) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~