• <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   管理


            精品无码久久久久久久久久| 久久精品人人做人人爽电影蜜月| 久久99精品久久久久久噜噜| 日韩久久久久中文字幕人妻| 欧美大香线蕉线伊人久久| 久久精品国产影库免费看| 日韩十八禁一区二区久久| 99久久婷婷免费国产综合精品| 88久久精品无码一区二区毛片| 亚洲国产成人久久一区WWW| 久久精品中文字幕无码绿巨人| 久久久精品久久久久久 | 色天使久久综合网天天| 人妻无码αv中文字幕久久| 欧美亚洲另类久久综合婷婷| 99国产精品久久| 亚洲国产精品成人久久| 久久精品亚洲精品国产欧美| A狠狠久久蜜臀婷色中文网| 中文字幕乱码人妻无码久久| 欧美激情精品久久久久久| 品成人欧美大片久久国产欧美...| 久久亚洲AV无码精品色午夜麻豆| 狠狠精品久久久无码中文字幕 | 国产精品一区二区久久国产| 久久精品亚洲AV久久久无码| 亚洲国产成人精品女人久久久| 国内精品久久九九国产精品| 国产成人无码久久久精品一| 无码人妻久久久一区二区三区| 久久亚洲AV成人无码软件| 久久亚洲天堂| 久久久久人妻一区二区三区| 久久综合五月丁香久久激情| 欧美久久久久久午夜精品| 久久精品国产一区二区| 久久综合五月丁香久久激情| 亚洲国产成人久久综合碰| 亚洲午夜无码久久久久| 久久综合国产乱子伦精品免费| 久久亚洲AV成人出白浆无码国产|