国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設計 > 正文

使用Dephi組件的生存期管理

2019-11-18 18:20:02
字體:
供稿:網(wǎng)友
?眾所周知,創(chuàng)建型設計模式中的都會創(chuàng)建對象。
可是對象在哪兒釋放呢?
當然,對于抽象工廠和工廠方法以及原型模式中,可以保存一個引用然后在需要的地方把它釋放掉。可Singleton模式中卻沒有這樣的引用,或是不能確定它是否創(chuàng)建了。
此時,Dephi的組件的生存期管理機制就非常有用了,你只需要從TCompenent繼承,并在構(gòu)造函數(shù)中把自己的Owner設為另一個被管理的組件(一般來說是你的Form,F(xiàn)rame之類),你創(chuàng)建的對象就會在它的Owner被釋放時自動釋放掉。呵呵,再也不用羨慕java程序員了:)
什么時候從TCompenent繼承使用?
我的建議是:只要可以任何時候。
由于在創(chuàng)建類的時候不能預測它的使用方式(我不能,也許你能),所以最好新建類都從TCompenent或TCompenent的派生類繼承,這樣可以防止以后對象的生存期不好處理,而且TCompenent實現(xiàn)了IInterface接口,由于我們的所有的接口都是從IInterface繼承(IUnknow也是),所以如果的你的類想實現(xiàn)接口的話,也最好從TCompenent或TCompenent的派生類繼承,否則的話你必須自己實現(xiàn)下面這三個方法。
??? function QueryInterface(const IID: TGUID; out Obj): HResult; stdcall;
??? function _AddRef: Integer; stdcall;
??? function _Release: Integer; stdcall;
當然如果你要必須要繼承的基類不是從TCompenent繼承的,那我也沒什么好辦法啦。
什么時候自己釋放什么時候交給Owner釋放?
先說一下區(qū)別,自己釋放可以更加有效的利用資源,有更少資源占用。由Owner釋放,可以減少錯誤率,減少代碼編寫量,使代碼更簡潔。
所以,如果你需要多次創(chuàng)建創(chuàng)建次數(shù)未知的就要手動釋放,只創(chuàng)建一次或有限次并對資源占用影響較小的就由Owner釋放好了。一個簡單的原則,所有在你覆蓋 Detroy中釋放的對象都可以由Owner釋放。在方法中創(chuàng)建的臨時變量絕對不能這樣設,因為雖然最后對象還是被釋放,但是你可能會多次創(chuàng)建同一個對象,造成大量的資源浪費,除非你把它實現(xiàn)成Singleton。

上一篇:mscomm32的簡單應用

下一篇:如何獲取自己在程序中運行的外部EXE的Handle?

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
學習交流
熱門圖片

新聞熱點

疑難解答

圖片精選

網(wǎng)友關(guān)注

主站蜘蛛池模板: 茂名市| 新泰市| 乌拉特前旗| 汨罗市| 大冶市| 扬州市| 获嘉县| 塘沽区| 禹州市| 镇巴县| 织金县| 永年县| 佛学| 正安县| 永善县| 桃源县| 吉林省| 玛纳斯县| 东明县| 福贡县| 基隆市| 宝丰县| 平乐县| 山东省| 海门市| 苏州市| 江都市| 察哈| 喜德县| 沽源县| 石泉县| 广丰县| 内丘县| 乌恰县| 东乡族自治县| 通山县| 民县| 太保市| 怀宁县| 怀宁县| 定襄县|