• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            S.l.e!ep.¢%

            像打了激速一樣,以四倍的速度運轉(zhuǎn),開心的工作
            簡單、開放、平等的公司文化;尊重個性、自由與個人價值;
            posts - 1098, comments - 335, trackbacks - 0, articles - 1
              C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

            關(guān)于delphi Assigned

            Posted on 2010-08-20 14:08 S.l.e!ep.¢% 閱讀(668) 評論(0)  編輯 收藏 引用 所屬分類: Delphi
            關(guān)于delphi Assigned
            2009-02-24 08:09

            1. 根據(jù) Delphi 指令參考手冊中

            說明:
            Assigned
            函式在參數(shù)不為 nil 時傳回 True, 表示指針已經(jīng)指到某個內(nèi)存地址,這個內(nèi)存地址可能是一個對象地首地址,也可能在函數(shù)或過程中,聲明一個指針變量,沒有賦值為 nil ,無亂的指向某處,這兩個種情況, Assigned (指針變量)都不為 nil , 函數(shù)放回 True

            而參數(shù)為 nil 時則傳回 False


            Assigned
            并不是一個真正的函數(shù)。

            技巧:
            用呼叫 Assigned 的方式來取代直接把參數(shù)拿來和 nil 比較,效率會更好。

            2. 這個問題要從內(nèi)存方面來解釋
            當(dāng)你建構(gòu)一個物件 SomeComponet.Create(Owner);
            系統(tǒng)會有一個指針指向這個對象
            當(dāng)你解構(gòu)一個物件 SomeComponet.Free;
            系統(tǒng)會將指針指到的東西殺掉,但是指標(biāo)還是指在相同的位置
            請注意計算機的資源是有限的,
            所以可能下一步你的程序要跟系統(tǒng)要資源,
            剛才的指針位置,就出現(xiàn)了其它的數(shù)據(jù)
            If Assigned(SomeComponet) then SomeComponet := nil;
            先檢查這個對象有沒有在其它地方被設(shè)成 nil
            然后再將它設(shè)成 nil

            當(dāng)我們無法預(yù)測使用者會如何操爆他的計算機,
            程序員必須留意內(nèi)存的管理。 小弟淺見 ...


            3
            function Assigned(var P): Boolean;

            Description

            Use Assigned to determine whether the pointer or procedure referenced by P is nil. P must be a variable reference of a pointer or procedural type. Assigned(P) corresponds to the test P<> nil for a pointer variable, and @P <> nil for a procedural variable.

            Assigned returns False if P is nil, True otherwise.

            檢查指針指向的參考變量或過程是否為 nil

            每次我通常的處理方法都是:

            if assigned(frm) then frm.close;?? 但是當(dāng)下次調(diào)用時就會出錯。為什么呢,直到咋天我才知道原因

            frm.close;frm.free; 只是指定這塊內(nèi)存可以重寫,并未釋放為 NIL 因此當(dāng)下次調(diào)用時即使 frm.free 已經(jīng)

            執(zhí)行過 assigned(frm) 仍為 TRUE ,再次釋放 frm.Close 或者 frm.free 肯定會報錯;應(yīng)為 frm.Close frm.free 是釋放 對象指針 frm 指向的內(nèi)存空間,在上次已經(jīng)釋放調(diào)了,但是 frm 本身并沒有 初始化為 nil , 相反它還是指向被釋放的內(nèi)存地址;東西已經(jīng)沒有了,沒有地東西去釋放,不報錯錯才怪。

            正確的處理方法:

            if assigned(frm) then
            begin
            ?? frm.close;
            ?? frm:=nil;
            end;

            :

            if assigned(frm) then
            begin
            frm.close;
            freeandnil(frm);
            end;

            // 可以測試一些就能真正理解 FreeAndNil Assigned 函數(shù)地使用方法了;

            procedure FreeAndNil(var Obj);

            Description

            Use FreeAndNil to ensure that a variable is nil after you free the object it references. Pass any variable that represents an object as the Obj parameter.

            var P: Pointer;

            begin
            P := nil;
            if Assigned (P) then Writeln ('You won''t see this');
            GetMem(P, 1024); {P valid}
            FreeMem(P, 1024); {P no longer valid and still not nil}
            if Assigned (P) then Writeln ('You''ll see this');
            end;


            只有注冊用戶登錄后才能發(fā)表評論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            久久久久无码中| 亚洲国产成人久久笫一页 | 麻豆精品久久久一区二区| 久久er热视频在这里精品| 亚洲国产成人乱码精品女人久久久不卡 | 久久99九九国产免费看小说| 久久国产免费观看精品3| 久久人人超碰精品CAOPOREN| 久久亚洲私人国产精品vA| 久久久久亚洲AV成人网人人网站| 亚洲综合日韩久久成人AV| 久久天天躁狠狠躁夜夜av浪潮| 久久精品www人人爽人人| 久久精品国产男包| 国产精品99久久久久久www| 久久99精品国产自在现线小黄鸭| 无码人妻少妇久久中文字幕| 久久久久久久尹人综合网亚洲| 人妻无码αv中文字幕久久| 综合久久久久久中文字幕亚洲国产国产综合一区首 | 久久久久亚洲?V成人无码| 久久精品国产秦先生| 99久久国产综合精品麻豆| 亚洲va久久久噜噜噜久久男同| 香蕉99久久国产综合精品宅男自 | 奇米综合四色77777久久| 三级三级久久三级久久| 一级做a爰片久久毛片看看| 久久中文字幕视频、最近更新| 久久99精品久久久久久野外| 久久精品国产99国产电影网| a级成人毛片久久| 91精品国产色综久久| 99久久综合狠狠综合久久| 国产AV影片久久久久久| 久久夜色撩人精品国产| 三级片免费观看久久| 一本色道久久99一综合| 久久ZYZ资源站无码中文动漫| 99久久777色| 精品国产一区二区三区久久蜜臀 |