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

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

  最近在集成ZJ的模塊的時(shí)候,發(fā)現(xiàn)當(dāng)窗體關(guān)閉的時(shí)候,頻繁的彈出內(nèi)存訪問(wèn)錯(cuò)誤,實(shí)在是煩躁啊,看了下代碼,雖然很慘,但也沒(méi)發(fā)現(xiàn)創(chuàng)建對(duì)象需要釋放的問(wèn)題,最后看到窗體關(guān)閉的時(shí)候,執(zhí)行了一大段代碼,考慮可能是窗體關(guān)閉的時(shí)候,其中的事件沒(méi)有執(zhí)行完成。考慮到這點(diǎn),在Close事件中加入了Release方法,調(diào)試,問(wèn)題解決。順便查了下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ì)象引用/指針的類型來(lái)確定,即使對(duì)象本身不存在也沒(méi)問(wèn)題,而且在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ì)象銷毀了,但并沒(méi)有把對(duì)象的引用設(shè)為nil,這需要程序員來(lái)完成,不過(guò)自從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消息處理過(guò)程CMRelease
  end;
  再看看下面CM_RELEASE消息處理過(guò)程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)載需保留來(lái)源!

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

主站蜘蛛池模板: 亚洲 日韩 在线 国产 视频 | 善良的小峓子2在钱免费中文字 | 2021扫黑风暴在线观看免费完整版 | 久久99re热在线观看视频 | 年轻漂亮的妺妺中文字幕版 | 久久成人无码国产免费播放 | 岛国在线无码免费观 | 久久综合视频网站 | jlzzzjizzzjlzzz亚洲 | 中文字幕乱码亚洲无线三区 | 国产亚洲美女在线视频视频 | 国产一区二区三区四区五在线观看 | 91精品在线国产 | 快播看av | 国产精品亚洲国产三区 | 忘忧草在线社区WWW日本-韩国 | aaaaaa级特色特黄的毛片 | 麒麟色欧美影院在线播放 | 亚洲精品卡2卡3卡4卡5卡区 | 18岁末年禁止观看免费1000个 | 日本妞欧洲| 亚洲AV怡红院AV男人的天堂 | 免费完整版观看 | 浪荡女天天不停挨CAO日常视 | 护士们的母狗 | xnxnxn69日本| 狠狠色丁香久久婷婷综合_中 | 免费一区二区三区久久 | 国产精品欧美一区二区在线看 | 欧美区一区二 | 肉欲横流(NP高H)| 野花香在线观看免费观看大全动漫 | 色色噜一噜 | 男同志在线观看 | 日本女人bb | 黑人猛挺进小莹的体内视频 | 纯肉无码AV在线看免费看 | 日韩欧美一区二区三区免费看 | 亚洲精品国产高清不卡在线 | GAY2022空少被体育生暴菊 | 暖暖视频免费观看高清完整版 |