Open CASCADE 智能指针的使用

原创 2008年12月09日 11:29:00

学习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


 

智能指针的使用示例

  • 2013年04月16日 14:41
  • 2KB
  • 下载

智能指针使用

  • 2014年08月27日 16:08
  • 28KB
  • 下载

VC++下使用ADO操作数据库的智能指针_ConnectionPtr、_RecordsetPtr、_CommandPtr的方法

(1)、引入ADO类 1 2 3 #import "c:\program files\common files\system\ado\msado15.dll" ...

C++中智能指针的设计和使用

智能指针(smart pointer)是存储指向动态分配(堆)对象指针的类,用于生存期控制,能够确保自动正确的销毁动态分配的对象,防止内存泄露。它的一种通用实现技术是使用引用计数(reference ...

智能指针shared_ptr组件的使用

shared_ptr是boost.smart_ptr库中最具价值、最有份量的组成部分。它与scoped_ptr一样包装了new操作符在堆上分配动态对象,但它实现的是引用计数(reference-cou...
  • ajioy
  • ajioy
  • 2012年03月16日 14:13
  • 4715

C/C++使用Lu键树实现智能指针及检查内存泄露

欢迎访问 Lu程序设计 C/C++使用Lu键树实现智能指针及检查内存泄露 1 说明     要演示本文的例子,你必须下载Lu32脚本系统。本文的例子需要lu32.dll、lu32.lib、C++格式...
  • forcal
  • forcal
  • 2014年01月03日 11:58
  • 1905

c++智能指针的使用,auto_ptr,shared_ptr

今天写程序时想用智能指针与vector容器一起解决指针数组的成员管理问题。在我的程序中我用到了多个指针容器,这样就导致了一个问题,这些指针容器的清空非常繁琐,我不能仅仅调用一次clear就能完成,我需...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Open CASCADE 智能指针的使用
举报原因:
原因补充:

(最多只允许输入30个字)