亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

delphi變量是否默認使用值初始化?

delphi變量是否默認使用值初始化?

holdtom 2019-09-02 09:12:13
我是Delphi的新手,我一直在運行一些測試來查看默認情況下初始化了哪些對象變量和堆棧變量:TInstanceVariables = class  fBoolean: boolean; // always starts off as false  fInteger: integer; // always starts off as zero  fObject: TObject; // always starts off as nilend;這是我習慣使用其他語言的行為,但我想知道在Delphi中依賴它是否安全?例如,我想知道它是否可能依賴于編譯器設置,或者可能在不同的機器上以不同的方式工作。依賴于對象的默認初始化值是正常的,還是在構造函數中顯式設置所有實例變量?至于堆棧(過程級)變量,我的測試顯示單位化布爾值為真,單位化整數為2129993264,未初始化對象只是無效指針(即不是nil)。我猜測規范是在訪問它們之前始終設置過程級變量?
查看完整描述

3 回答

?
四季花海

TA貢獻1811條經驗 獲得超5個贊

是的,這是記錄在案的行為:

  • 對象字段始終初始化為0,0.0,'',False,nil或任何適用的值。

  • 全局變量也始終初始化為0等;

  • 本地引用計數*變量始終初始化為nil或'';

  • 本地非引用計數*變量未初始化,因此您必須先分配一個值才能使用它們。

我記得Barry Kelly某個地方為“引用計數”寫了一個定義,但是找不到它,所以這應該在此期間做:

reference-counting ==自行引用計數,或直接或間接包含引用計數的字段(用于記錄)或元素(用于數組):string, variant, interface 或包含此類型的動態數組靜態數組。

筆記:

  • record 本身不足以成為參考計數

  • 我還沒有嘗試使用泛型


查看完整回答
反對 回復 2019-09-02
?
富國滬深

TA貢獻1790條經驗 獲得超9個贊

沒有顯式初始值設定項的全局變量在可執行文件的BSS部分中分配。它們實際上并沒有占用EXE中的任何空間; BSS部分是OS分配并清除為零的特殊部分。在其他操作系統上,有類似的機制。

您可以依賴零初始化的全局變量。


查看完整回答
反對 回復 2019-09-02
?
白衣染霜花

TA貢獻1796條經驗 獲得超10個贊

以下是Ray Lischners Delphi在Nutshell?第2章中的引用

“當Delphi首次創建一個對象時,所有字段都開始為空,即指針初始化為nil,字符串和動態數組為空,數字值為零,布爾字段為False,Variants設置為Unassigned。 (有關詳細信息,請參閱第5章中的NewInstance和InitInstance。)“

確實需要初始化本地范圍內的變量...我會將上面的注釋“全局變量初始化”視為可疑,直到提供參考 - 我不相信。

?Barry Kelly說你可以依賴它們進行零初始化,而且因為他在Delphi編譯器團隊中,我相信這就是:)

查看完整回答
反對 回復 2019-09-02
  • 3 回答
  • 0 關注
  • 995 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號