2016-06-01 11 views
3

私は標準的な手順を使用のDelphiアプリケーションでの私のカスタムクラスを作成する場合:Delphiで作成するすべてのクラスにはデストラクタが必要ですか?

TCustomClass = Class 
private 
    var1,var2 : integer/string/Real/Boolean... 
    procedure P1... 
    function F1... 
public 
    constructor Create; 
end; 

... 

CustomClass := TCustomClass.create; 

を、私は、アプリケーションが終了したとき、私はいつも自由にリソースを自動的にもデストラクタプロシージャを作成するために持っているか、しているか知りたいですか?

私は常にアプリケーションを所有者として使用します。まったく自己または無しではありません。誰かがポインタを使用したときを除いて、インターネットで見たクラスでデストラクタを宣言している人がいました。事前に

Should every class have a virtual destructor?

ありがとう:

はこの質問で説明したようにC++のようにDelphiで同じデストラクタの背後にあるロジックです。

EDIT1: 無料コンサルティングは、私は変数の一つは、あなたが割り当てられたメモリのようなものを、クリーンアップする必要がある場合にのみ、デストラクタを持っている必要がありますTBitmapのタイプ

+1

Delphiのすべてのクラスにはすでに仮想デストラクタがあります。問題は、それを上書きする必要があるかどうかです。スーパークラスによってファイナライズされていない、このクラスによって取得されたリソースのクラスをファイナライズする必要がある場合は、オーバーライドします。 –

+1

質問にTBitmapメンバーを使用しているという事実を含めるべきです。 –

答えて

3

かもしれないと言うのを忘れて述べたように。たとえば、TClassname.Create(...)をコンストラクタで使用した場合は、デストラクタメソッドを解放する必要があります。

もちろん、デストラクタ(データを消去しようとしていることをユーザーに知らせるまで)が必要な理由はたくさんありますが、これが最も一般的です。

+0

Bitmap:TBitmap.createを使用してそのクラスのTbitmap変数を初期化すると、デストラクタを呼び出す必要がありますか? –

+0

destuctorを呼び出す必要はありません。自動的に行われます。しかし、デストラクタにBitmap.Freeを含める必要があります。 – Jur

+0

申し訳ありませんが、私はクラス宣言でデストラクタを宣言しなければならないと言います。 –

関連する問題