Delphi自定義類中的“構造函數”與“析構函數”


1.重載構造函數overload關鍵字
eg:
    constructor Create(Name:string;Sex:string;Year:integer;Tall:integer;Weight:integer);overload;
    constructor Create(Name:string;Sex:string);overload;   

    ps: 重載構造函數,注意一定要使用關鍵字:overload

 


2.自定義類中是否需要顯式定義構造函數:
    所有類默認繼承自TObject,即使沒有聲明class(TObject),Create實際是通知編譯器為其分配一塊堆內存.

在自定義類中,即使沒有顯式的定義構造函數,程序默認調用的是TObject的構造函數.



3.TObject.Free的真正作用:實際上只是為"堆內存塊"解鎖,使得其他程序可以使用該塊堆內存,而引用並沒有被

     重置為nil,因此,經常Free之后,仍可以正確訪問到對象的成員變量(解鎖后,該塊內存沒有被其他程序使用)

 


4.自定義的類,什么時候需要專門定義析構函數?
     自定義的類中,含有類成員.由於Free操作只是對當前對象的"堆內存塊"進行了解鎖,而類成員指向的另一塊

"堆內存塊" 並沒有被解鎖,如果不在析構函數中對其解鎖,則會造成內存泄漏.

 


5.不需要程序員顯示調用Free的自定義類?
     對於從Tcomponent繼承下來的對象,在Create的時候可以指定一個所有者。如果一個對象在創建時指

定了所有者,那么該對象的生存期將由所有者進行管理。所有者在析構時,會同時析構它所擁有的全部對象。

 


6.自定義類中,如何定義析構函數?
     Delphi中所有類都繼承自TObject ,Create默認不是虛方法 ,Destroy默認是虛方法.被覆蓋的函數必須是

虛(virtual)的,或者是動態(dynamic)的,因此自定義類的Destroy方法可以被覆蓋.
     而VCL中組件繼承的大多Create都被聲明成虛方法了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM