2010-12-14 65 views

答えて

23

単純な答え号

デルファイは、ユーザー定義型は、手動で割り当てと割り当て解除する必要があり、完全なガベージコレクションの言語ではありません。文字列、動的配列、使いやすいインタフェースなど、いくつかの組込み型の自動収集のみを提供します。

しかし、ガベージコレクションの参照カウントをある程度使用するインターフェイスを使用できます。

+6

TComponentから派生したものがコンストラクタを介して所有者ポインタを取得することにより、オブジェクトが所有者と共に破棄されるという事実も重要です。 –

+0

デルファイガーベッジは、動的配列、文字列などの一部のデータ型を収集します。 –

+0

Delphiは、インタフェースの存続期間(RefCountの実装)と別のタイプを管理する方法であるARC(Automatic Reference Counting)に精通しています。 最近、最新のDelphiモバイルコンパイラがオブジェクトにARCを導入しました。これはコンパイラ指令 "{$ AUTOREFCOUNT}"によって制御されます。 http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Automatic_Reference_Counting_in_Delphi_Mobile_Compilers – Lucas

6

通常のガベージコレクションでは、ランタイムが参照されていないオブジェクトを検出してそれらを破棄したり、未使用のリソースを再利用したりしますが、Delphiではガベージコレクションはありません。

ネイティブWin32 Delphiを使用する場合、ガベージコレクションに最も近いのは、文字列、インタフェース、バリアント、および動的配列を含むさまざまな参照カウント型です。これらのタイプは、プログラムがもはや使用されていないと判断したときに自動的にクリーンアップされますが、そのオブジェクトが現在のスコープに入ったり出たりするときに参照カウントを保持することによって、そのタイプが自動的にクリーンアップされます。 オーナーシップという概念もあり、所有者が破壊されたときに所有コンポーネントを破壊します。

Delphi for .NETを使用している場合、暗黙的に基本となるランタイムのガベージコレクションがあります。

+2

Delphi.NETは2年以上で死んでいます –

+5

はい、@ユーザー、デルファイ7は10年前からあります死んでいなければならない。さらに、Delphi言語はPrism経由で.Net用に引き続き利用可能です。 –

+3

Prismは共有ソースを試みていないので、私はそれを継続として正確には見ません。商標を除く。 –

17

はい、あります。

デルファイのWin32には、のガベージコレクタが含まれていないため、この質問に対するその他の回答は技術的に正しいものです。しかし、これは不可能であるか、存在していないことを意味するものではありません。 Delphiの交換可能なメモリマネージャBarry Kellyのおかげでそれは(基本的に割り当てられていないオブジェクトを作成し、GCがそれらをかむ見て)その使用方法を示すサンプルコードが含まれて2004年

に戻っBoehm garbage collectorためwrapper完全に機能を実装しました。 Boehm GCより高度なGCがありますが、これは可能なことをはっきりと示しており、ほぼ透過的に使用できます。プロジェクトのuses節の先頭にgcユニットを追加するだけです。

私はそれを試しているプロジェクトについて聞いたことがありませんが、誰かがより高度なgcをラップまたは移植するのを妨げるものは何もありません。それは、.NETに基づいている

2

デルファイプリズム

はガベージコレクションを持っている

標準デルファイ

がガベージコレクション

1

デルファイのWin32を持っていません(Win32ネイティブ)/64にはガベージコレクタがありません。 しかし、Delphiのネイティブ参照カウントメカニズムを利用して、インターフェイスを使用してインスタンスを自動的にリリースすることができます。

ガベージコレクタと参照カウントメカニズムの違いは、循環参照に対処する必要があることです。つまり、AインスタンスとBインスタンスが互いに参照する場合は、AまたはBが解放されるサイクルを手動で解除する必要があります。

関連する問題