6
我想修復已使用多年的記錄TMyValue中的設計缺陷,並且我非常想將其修復到記錄本身中 - 以避免更改公共接口 - 而且不需要代碼使用記錄進行更改。保證堆棧記錄的初始化
本質上,缺陷是TMyValue在創建時必須初始化爲零,否則在其上調用Clear方法會導致崩潰。這是因爲它包含一個字段,如果指針非零,則它是指向動態分配內存的指針,Clear將釋放動態內存。
如果TMyValue在堆棧上創建,這是一個問題,因爲堆棧變量在創建時不會自動清零。
我想我可以使用記錄構造函數來清零記錄,但記錄構造函數不能無參數。推測這意味着當在堆棧上創建記錄時,不能強制自動執行記錄構造函數。
我懷疑我的問題的答案是「它不能做」。請證明我錯了!
不錯。我總是喜歡讓編譯器讓你的生活更輕鬆。 –
@MarjanVenema,知道一些技巧總是很好。但是,能夠在記錄上聲明初始化/完成例程應該在很久以前就已經實施了。參見['QC21729記錄操作符重載:請執行「Initialize」和「Finalize」操作符](http://qc.embarcadero.com/wc/qcmain.aspx?d=21729)。我想補充說的是,所有內部程序也應該能夠用於類操作符的記錄。我的意思是複製,高,低,長度,SetLength等 –
哦,是啊!投票,我輸入... –