使用Delphi對象(聲明、實例化、構造、釋放)

1、聲明和實例化程序員

  在使用一個對象以前,用class關鍵字聲明一個對象。能夠在一個程序或單元的type部分聲明一個對象類型:安全

type
    TFooObject = class;

  除了聲明一個對象類型,一般還須要一個對象的變量,即實例。實例定義在var部分spa

var
    FooObject; TFooObject;

  在Delphi中經過調用它的一個構造器來創建一個對象的實例,構造器主要是用來爲對象建立實例併爲對象中的域分配內存進行初始化使得對象處於可以使用的狀態指針

  Delphi的對象至少有一個構造器稱爲create(),可是一個對象能夠有多個構造器。根據不一樣的對象類型,Create()能夠有不一樣的參數對象

  不像在C++中,在Delphi中構造器不能自動調用,程序員必須本身調用構造器,調用構造器的語法以下blog

FooObject:= TFooObject.Create;

  注意這裏調用構造器的語法有一點特殊,是經過類型來引用一個對象的Create()方法,而不是像其餘方法那樣經過實例來引用。這看上去有點奇怪,可是頗有意義。變量FooObject在調用時尚未被定義,而TFooObject已經靜態地存在於內存之中,靜態調用它的Create()方法是合法的內存

  經過調用構造器來建立對象的實例,這就是所謂的實例化作用域

  注意:當一個對象實例用構造器建立的時候,編譯器將對對象的每個域經行初始化,你能夠放心地認爲全部數字被賦值爲0,全部指針賦值爲NIL,全部字符串爲空字符串

 

2、析構編譯器

  當用完對象,應該調用這個實例的Free()方法來釋放它。Free()首選進行檢查保證這個對象實例不爲NIL,而後調用對象的析構方法Destroy()。天然,析構進行與構造相反的工做,它釋放全部分配的空間,並執行一些其餘操做以保證對象可以適當地移除內存。語法

FooObject.free;

  不像調用Create(),這裏是調用對象實例的Free()方法,記住不要直接調用Destroy(),而調用更安全的Free()方法,由於Free()首選進行檢查保證這個對象實例不爲NIL,而後調用對象的析構方法Destroy()

  警告:在C++中,一個靜態聲明的對象在離開它的做用域時自動調用它的析構方法,可是要對動態生成的對象手動調用析構方法。這個規則在Delphi裏面也適用,全部使用Create()動態聲明建立的對象即便離開建立它時候的做用域,它也不會被自動釋放,必須使用Free()方法來動態的析構,除了在Delphi中的隱式動態建立的對象,因此必定要記住這個規則:凡是建立的,都須要釋放。這個規則有兩個重要的特例

1)當對象被其餘對象擁有時,它將替你釋放對象。

2)引用技術的對象,當最後一個引用釋放時,它將被析構。

  

  你可能要問,這些方法是怎樣進到對象中的,不須要爲這些方法寫代碼,對嗎?是的,剛纔討論的方法來自於Object Pascal的基類TObject對象。在Object Pascal中全部的對象都是TObject對象的後代,而無論它們是不是這樣聲明的。所以,下面的聲明:

type
    TFoo = class;

  至關於聲明成

type
    TFoo = class(TObject);
相關文章
相關標籤/搜索