Open CASCADE 智能指针的使用
来源:互联网 发布:mysql多表查询语句 编辑:程序博客网 时间:2024/05/16 14:49
学习OCC的第一步是要了解其类的结构及组成,比如AIS_InteractiveObject类用来表示一个交互
式图形对象,如果进一步了解会发现其继承关系是:MMgt_TShared->Standard_Transient-
>PrsMgr_PresentableObject->SelectMgr_SelectableObject->AIS_InteractiveObject
其实,许多类的基类都是MMgt_TShared
,另外,每个类都有一个对应的类,比如 ,对于Standard_Transient类来说,实际使用的是
Handle(Standard_Transient)类,不要被括号搞混了,它只不过是个宏定义,也就是类
Handle_Standard_Transient.
那么OCC为什么这样绕一圈子呢,原因是,在OCC中要避免使用指针,所谓“不使用”,只不过是
对它做一层包装,让用户感觉不到使用指针,这层包装就是Handle(类名)的作用。
那么OCC为什么对指针如此避讳呢?
当如果做图形时,如果生成一个类,比如一个直线,如果直接用new的方法,那么每生成一个就
占用一片空间,这样会占用很多系统资源。同时降低效率。显然,只是顶点位置不同的直线,如
果对它的颜色,线型等都重新生成,那生成一万条直线机器肯定吃不消。
一个解决方法就是只拷贝构造函数生成直线,让他不存储数据,而只存储一个指向原来直线数据
的指针。这样空间就节省了很多。但问题在于这样两个直线完全联结在了一起。如果修改了其中
一个,另一个也跟着变了。同时如果删除了第二个直线,第一个直线实际上数据也删除了,成了
悬挂指针。
OCC中Handle的真正作用正是解决这个问题的。在Standard_Transient类中有一个私有变量:
Standard_Integer count;它用用计算引用数的,也就是说每生成一个直线,就增加一,每删除
一条直线,就减一,除非count等于O了,才真正删除Standard_Transient所占用的空间。平时,
这几条直线都共用颜色值,共用同一块空间,直到更改其中一条线的颜色时,才真正分配此直线
的颜色值空间。
如果我的分析有不正确的地方,可以直接将砖头扔到tongabcd@yeah.net ;
- Open CASCADE 智能指针的使用
- 智能指针的使用
- 智能指针的使用
- 智能指针的使用
- 智能指针的使用
- 智能指针 _com_ptr_t的使用
- 使用智能指针的危险
- C++ 智能指针的使用
- 智能指针auto_ptr的使用
- ADO智能指针的使用
- C++ 智能指针的使用
- c++智能指针的使用
- C++智能指针的使用
- 使用智能指针的注意事项
- 指针(4)智能指针的使用
- vtk智能指针->对智能指针的理解和使用
- Loki 智能指针 SmartPtr 的使用
- stl中使用智能指针的问题
- 多行文本取段落文字
- 关于浏览器兼容img标签
- 为gridview“删除”列添加确认对话框
- SQLDMO类的使用
- 分页导航控件
- Open CASCADE 智能指针的使用
- 动态引入Javascript
- jdk,j2sdk,j2eesdk,jre 的区别和联系
- linux环境变量path配置
- Tomcat5.5 Hibernate3 配置数据库连接池2
- GridView的基本操作
- QComboBox的activated与currentIndexChanged两Signal的区别
- 让你5分钟明白美国金融危机爆发的原因!
- 用 MapFileAndCheckSum 函数检测 exe 或 dll 是否被修改