明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1692|回复: 6

为什么ARX的实体类采用动态分配,然后内部管理的方式进行操作.

[复制链接]
发表于 2004-10-26 08:22:00 | 显示全部楼层 |阅读模式
为什么ARX采用内部管理内存的方式进行操作.比如往图纸新增一实体,只能是NEW一个实体,然后将它加入.而不能生成一个局部变量,将它加入.这样做有什么好处吗?
发表于 2004-10-26 10:07:00 | 显示全部楼层
这个问题问得很好。


我试了一下,创建类的对象,然后添加到图形数据库中,是不能成功的。


虽然不太了解AutoCAD内部的实现机制,但是从小型CAD软件的开发中得到的启发是:图形数据库可能是一个类似链表的东西,也就是说,当你向数据库中Append一个对象时,相应的指针被添加到链表中(当然不可能直接作为链表的一个节点,而是节点的一部分),因此我们并没有执行delete的操作,而是在数据库被析构时一起释放了内存。


这也就解释了为什么不能直接用类的对象来创建实体的原因。


当然,只是一点个人看法,是否正确,有待指正。
 楼主| 发表于 2004-10-26 11:48:00 | 显示全部楼层
我也觉得只能这样解释,但有点我却很不明白,如果真的是直接这样置入文件数据库的话,那像打开这样的操作返回的指针应该也是直接指向文件数据库的对像,这样是不是太危险了呢?
发表于 2004-10-26 15:06:00 | 显示全部楼层
文件--(ACAD管理)---内存---(ACAD管理)---我们生成的图元


这样是最安全的呀.


new是在堆中,要手动清空,而我们是在ACAD上做二次开发,也可以 说是插件,所以我们是不能自己释放已经加入块表纪录的实体,只能由ACAD来管理回收内存.同时这也是他实现Undo的关键所在.


另一方面,没有加入块表纪录的实体必须要自己手工delete掉,否则内存泄漏
 楼主| 发表于 2004-10-27 09:04:00 | 显示全部楼层
事实上我是觉得用指针直接操作文件中的对像很危险,很容易破坏掉整个文件.暂时不说这个.想听听easypower 对UNDO机制的理解.
发表于 2004-10-27 13:59:00 | 显示全部楼层
错!!你没直接操作文件!!


甚至你连操作已经加入块表纪录的实体指针的权限都不够大!


中间ACAD        的核心机制帮你管理了,所以,除非ACAD程序有问题,否则一点都不危险.


至於UNDO,当你对实体操作时,ACAD已经纪录下来了,而实体的内存物理存储又是他自己管理.所以他也就能实现了,谈不上什么理解,还很片面,大家探讨.
 楼主| 发表于 2004-10-28 11:44:00 | 显示全部楼层
可能水平不够吧。看不懂你说的意思。不过我觉得打开返回的指针是直接指向文件中的对像的,关于UNDO,人人都知道肯定是作了记录的,但如何记录可就不会那么容易理解的了,像MFC里有个最简单绘图程序专门用来教学的,如果了解UNDO的一些基本思想的话,就可以试试看
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-26 10:32 , Processed in 0.162316 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表