Open CASCADE 智能指標的使用

來源:互聯網
上載者:User

學習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 ;

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.