乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 72|回复: 6

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

[复制链接]

15

主题

66

帖子

3

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

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

使用道具 举报

34

主题

372

帖子

7

银币

中流砥柱

Rank: 25

铜币
508
发表于 2004-10-26 10:07:00 | 显示全部楼层
这个问题问得很好。
我试了一下,创建类的对象,然后添加到图形数据库中,是不能成功的。
虽然不太了解AutoCAD内部的实现机制,但是从小型CAD软件的开发中得到的启发是:图形数据库可能是一个类似链表的东西,也就是说,当你向数据库中Append一个对象时,相应的指针被添加到链表中(当然不可能直接作为链表的一个节点,而是节点的一部分),因此我们并没有执行delete的操作,而是在数据库被析构时一起释放了内存。
这也就解释了为什么不能直接用类的对象来创建实体的原因。
当然,只是一点个人看法,是否正确,有待指正。
回复

使用道具 举报

15

主题

66

帖子

3

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
126
发表于 2004-10-26 11:48:00 | 显示全部楼层
我也觉得只能这样解释,但有点我却很不明白,如果真的是直接这样置入文件数据库的话,那像打开这样的操作返回的指针应该也是直接指向文件数据库的对像,这样是不是太危险了呢?
回复

使用道具 举报

14

主题

202

帖子

4

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
258
发表于 2004-10-26 15:06:00 | 显示全部楼层
文件--(ACAD管理)---内存---(ACAD管理)---我们生成的图元
这样是最安全的呀.
new是在堆中,要手动清空,而我们是在ACAD上做二次开发,也可以 说是插件,所以我们是不能自己释放已经加入块表纪录的实体,只能由ACAD来管理回收内存.同时这也是他实现Undo的关键所在.
另一方面,没有加入块表纪录的实体必须要自己手工delete掉,否则内存泄漏
回复

使用道具 举报

15

主题

66

帖子

3

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
126
发表于 2004-10-27 09:04:00 | 显示全部楼层
事实上我是觉得用指针直接操作文件中的对像很危险,很容易破坏掉整个文件.暂时不说这个.想听听easypower 对UNDO机制的理解.
回复

使用道具 举报

14

主题

202

帖子

4

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
258
发表于 2004-10-27 13:59:00 | 显示全部楼层
错!!你没直接操作文件!!
甚至你连操作已经加入块表纪录的实体指针的权限都不够大!
中间ACAD        的核心机制帮你管理了,所以,除非ACAD程序有问题,否则一点都不危险.
至於UNDO,当你对实体操作时,ACAD已经纪录下来了,而实体的内存物理存储又是他自己管理.所以他也就能实现了,谈不上什么理解,还很片面,大家探讨.
回复

使用道具 举报

15

主题

66

帖子

3

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
126
发表于 2004-10-28 11:44:00 | 显示全部楼层
可能水平不够吧。看不懂你说的意思。不过我觉得打开返回的指针是直接指向文件中的对像的,关于UNDO,人人都知道肯定是作了记录的,但如何记录可就不会那么容易理解的了,像MFC里有个最简单绘图程序专门用来教学的,如果了解UNDO的一些基本思想的话,就可以试试看
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-2-5 00:54 , Processed in 0.157174 second(s), 66 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表