天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

destroy, free, freeAndNil, release用法和區(qū)別

  最近在集成ZJ的模塊的時(shí)候,發(fā)現(xiàn)當(dāng)窗體關(guān)閉的時(shí)候,頻繁的彈出內(nèi)存訪問錯(cuò)誤,實(shí)在是煩躁啊,看了下代碼,雖然很慘,但也沒發(fā)現(xiàn)創(chuàng)建對(duì)象需要釋放的問題,最后看到窗體關(guān)閉的時(shí)候,執(zhí)行了一大段代碼,考慮可能是窗體關(guān)閉的時(shí)候,其中的事件沒有執(zhí)行完成。考慮到這點(diǎn),在Close事件中加入了Release方法,調(diào)試,問題解決。順便查了下destroy, free, freeAndNil, release用法和區(qū)別,如下:

===以下方法源自網(wǎng)絡(luò)===

  1)destroy:虛方法
  釋放內(nèi)存,在Tobject中聲明為virtual,通常是在其子類中override 它,且要加上inherited關(guān)鍵字,才能保證派生類對(duì)象正確地被銷毀;
  但destroy一般不能直接用,為什么?
  假如當(dāng)一個(gè)對(duì)象為nil,我們?nèi)匀徽{(diào)用destroy,此時(shí)會(huì)產(chǎn)生錯(cuò)誤。因?yàn)閐estroy是虛方法,它要根據(jù)對(duì)象中的頭四個(gè)字節(jié)找到虛擬方法表Vmt的入口地址,從而找到destroy的入口地址,所以此時(shí)對(duì)象一定要存在。但free就是靜態(tài)方法,它只需根據(jù)對(duì)象引用/指針的類型來確定,即使對(duì)象本身不存在也沒問題,而且在free中有判斷對(duì)象是否存在的操作,所以用free比用destroy安全。


  2)free:靜態(tài)方法
  測(cè)試對(duì)象是否為nil, 非nil則調(diào)用destroy。下面是free的Delphi代碼:
  procedure TObject.Free;
  begin
  if Self <> nil then
  Destroy;
  end;
  一靜一動(dòng),取長(zhǎng)補(bǔ)短,豈不妙哉!
  但是調(diào)用對(duì)象的Destroy只是把對(duì)象銷毀了,但并沒有把對(duì)象的引用設(shè)為nil,這需要程序員來完成,不過自從Delphi5之后,在sysUtils單元中提供了一個(gè)freeAndNil。


  3)freeAndNil;一般方法,非對(duì)象方法,非類方法。
  procedure FreeAndNil(var Obj);
  var
  Temp: TObject;
  begin
  Temp := TObject(Obj);
  Pointer(Obj) := nil;
  Temp.Free;
  end;
  建議大家用它代替free/Destroy,以便確保正確地釋放對(duì)象。

 

  4)release;TcustomForm中定義的靜態(tài)方法。  
  當(dāng)窗口中所有的事件處理完之后,才調(diào)用free函數(shù)。常用在銷毀窗口,而在這個(gè)窗口中事件處理需要一定的時(shí)間的時(shí)候,用這個(gè)方法能確保窗口事件處理完之后才銷毀窗口。下面是TCustomForm.Release的Delphi源代碼:
  procedure TCustomForm.Release;
  begin
  PostMessage(Handle, CM_RELEASE, 0, 0);
  //向窗口發(fā)CM_RELEASE消息到消息隊(duì)列,當(dāng)所有的窗口事件消息處理完之后,
  //再調(diào)用CM_RELEASE消息處理過程CMRelease
  end;
  再看看下面CM_RELEASE消息處理過程CMRelease的定義:
  procedure CMRelease(var Message: TMessage); message CM_RELEASE;
  procedure TCustomForm.CMRelease;
  begin
  Free; //最后還是free;
  end;

it知識(shí)庫(kù)destroy, free, freeAndNil, release用法和區(qū)別,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 久久中文字幕人妻熟AV女蜜柚M | 午夜宅宅伦电影网中文字幕 | 香蕉59tv视频| 伊人久久精品午夜 | 香蕉久久av一区二区三区 | 亚洲国产日韩欧美视频二区 | 国产精品青青在线麻豆 | 91久久精一区二区三区大全 | 国产午夜AV无码无片久久96 | 成人a视频片在线观看免费 成人a毛片久久免费播放 | 日韩欧美视频一区二区 | 美女被免费喷白浆视频 | 国产精品爽黄69天堂A片 | 日本美女搞基视频 | 久久综合伊人 | 13一18TV处流血TV | 青青草原91 | 十八禁啪啦啪漫画 | 一区二区三区毛AAAA片特级 | 国产AV视频二区在线观看 | 免费看国产精品麻豆 | JIZJIZJIZ 日本老师水多 | 岛国在线无码免费观 | 一本道高清不卡v免费费 | 最近的2019中文字幕国语版 | 婷婷午夜影院 | 丰满老熟女白浆直流 | 3D动漫网站HOXXXxes| 国产精品.XX视频.XXTV | 99re这里只有精品国产 | 国产成人精品综合久久久 | 九九久久精品国产 | 观赏女性排尿 | 精品国产一区二区三区久久影院 | 精品久久久久中文字幕加勒比东京热 | 久久亚洲国产中文字幕 | 久久夜色撩人精品国产 | 国产高潮久久精品AV无码 | 激情床戏揉胸吃胸视频 | av天堂网2014在线 | 国产精品你懂的在线播放 |