亚洲免费乱码视频,日韩 欧美 国产 动漫 一区,97在线观看免费视频播国产,中文字幕亚洲图片

      1. <legend id="ppnor"></legend>

      2. 
        
        <sup id="ppnor"><input id="ppnor"></input></sup>
        <s id="ppnor"></s>

        C++技巧:OpenCASCADE智能指針的使用

        字號(hào):

        學(xué)習(xí)OCC的第一步是要了解其類的結(jié)構(gòu)及組成,比如AIS_InteractiveObject類用來表示一個(gè)交互 式圖形對(duì)象,如果進(jìn)一步了解會(huì)發(fā)現(xiàn)其繼承關(guān)系是:MMgt_TShared->Standard_Transient->PrsMgr_PresentableObject->SelectMgr_SelectableObject->AIS_InteractiveObject。
            其實(shí),許多類的基類都是MMgt_TShared,另外,每個(gè)類都有一個(gè)對(duì)應(yīng)的類,比如 ,對(duì)于Standard_Transient類來說,實(shí)際使用的是Handle(Standard_Transient)類,不要被括號(hào)搞混了,它只不過是個(gè)宏定義,也就是類Handle_Standard_Transient.那么OCC為什么這樣繞一圈子呢,原因是,在OCC中要避免使用指針,所謂“不使用”,只不過是對(duì)它做一層包裝,讓用戶感覺不到使用指針,這層包裝就是Handle(類名)的作用。
            那么OCC為什么對(duì)指針如此避諱呢?
            當(dāng)如果做圖形時(shí),如果生成一個(gè)類,比如一個(gè)直線,如果直接用new的方法,那么每生成一個(gè)就占用一片空間,這樣會(huì)占用很多系統(tǒng)資源。同時(shí)降低效率。顯然,只是頂點(diǎn)位置不同的直線,如果對(duì)它的顏色,線型等都重新生成,那生成一萬條直線機(jī)器肯定吃不消。一個(gè)解決方法就是只拷貝構(gòu)造函數(shù)生成直線,讓他不存儲(chǔ)數(shù)據(jù),而只存儲(chǔ)一個(gè)指向原來直線數(shù)據(jù)的指針。這樣空間就節(jié)省了很多。但問題在于這樣兩個(gè)直線完全聯(lián)結(jié)在了一起。如果修改了其中一個(gè),另一個(gè)也跟著變了。同時(shí)如果刪除了第二個(gè)直線,第一個(gè)直線實(shí)際上數(shù)據(jù)也刪除了,成了懸掛指針。
            OCC中Handle的真正作用正是解決這個(gè)問題的。在Standard_Transient類中有一個(gè)私有變量:Standard_Integer count;它用用計(jì)算引用數(shù)的,也就是說每生成一個(gè)直線,就增加一,每刪除一條直線,就減一,除非count等于O了,才真正刪除Standard_Transient所占用的空間??荚?大提示這幾條直線都共用顏色值,共用同一塊空間,直到更改其中一條線的顏色時(shí),才真正分配此直線的顏色值空間。