我是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
本身不足以成為參考計數我還沒有嘗試使用泛型

富國滬深
TA貢獻1790條經驗 獲得超9個贊
沒有顯式初始值設定項的全局變量在可執行文件的BSS部分中分配。它們實際上并沒有占用EXE中的任何空間; BSS部分是OS分配并清除為零的特殊部分。在其他操作系統上,有類似的機制。
您可以依賴零初始化的全局變量。

白衣染霜花
TA貢獻1796條經驗 獲得超10個贊
- 3 回答
- 0 關注
- 995 瀏覽
添加回答
舉報
0/150
提交
取消