問題タブ [tinterfacedobject]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
3 に答える
2587 参照

delphi - TInterfacedObjectガベージの子孫が収集されないのはなぜですか?

TInterfacedObjectに基づくクラスがあります。TTreeNodeのDataプロパティに追加します。

私はこのオブジェクトの多くのインスタンスを作成し、それらは参照カウントであるため、それらを解放する必要はないと想定していました。それは便利でしょう。

ただし、これを確認すると、ReportMemoryLeaksOnShutdownをオンにしたところ、結局解放されていないことがわかりました。

これらのオブジェクトは、メインフォームに配置されたフレームに作成されています。メインフォームのFormCloseで、すべてのオブジェクトが解放されるようにツリーノードをクリアします。

何が起こっていますか?

ご協力ありがとうございました!

0 投票する
7 に答える
6346 参照

delphi - オブジェクトの参照カウント

私のコードでは、さまざまな場所で作成された小さなデータ保存クラスを使用しています。メモリリークを回避し、物事を単純化するために、参照カウントを使用したいので、

TFileInfo.Freeへの手動呼び出しをすべて削除しました。残念ながら、Delphiは多くのメモリリークを報告しました。SOで検索すると、これが機能しない理由を説明する次の質問が見つかりました。

TInterfacedObjectガベージの子孫が収集されないのはなぜですか?

そこに回避策が示されていますが、(少なくとも正しく理解できれば)カスタムインターフェイスIFileInfoを作成し、多くのゲッターとセッターを提供する必要があります。これは避けたいものです。

編集私は、create FileInfoオブジェクトを2つの異なる種類のハッシュテーブルに挿入することを追加する必要があります。1つはTBucketListから派生し、もう1つはCodegearフォーラムのハッシュマップ実装です。内部的には両方ともユーザーポインタであるため、状況は他の質問と同じです。

Delphiのオブジェクトに参照カウントを使用させる他の可能性はありますか?

0 投票する
3 に答える
714 参照

arrays - コンパイラは、実装が同一に見えるのに「前の宣言とは異なる」と言うのはなぜですか?

私は2つのユニットを持っています。最初の1つは私のインターフェースです:

2 番目のユニット、私のオブジェクト宣言:

「proceso」関数と「iniciar」プロシージャでのみエラー メッセージが表示されます。

'Iniciar' の宣言が以前の宣言
と異なります 'Proceso' の宣言が以前の宣言と異なります。

配列パラメーターがあることに気付きました。パラメータの型は最初のユニットで定義されています。これらの型を 2 番目のユニットで定義すると、同じエラーが発生しますが、オブジェクトの宣言に表示されます。どうすればコンパイルできますか?

0 投票する
0 に答える
96 参照

delphi - TInterfacedObject から派生した XE8 64 ビット デバッグ オブジェクト

インターフェイス ICar をサポートし、TInterfacedObject から派生したクラス TCar があるとします。

上記のコードを 32 ビット モードでデバッグすると、TCar クラスのメソッド「Start」にステップ インできます。さらに、車の変数の上にマウスを置くと、「TCar(address) as ICar」であることがわかりますが、このコードを 64 ビット モードでデバッグしようとすると、"Start" メソッドにステップ インできず (デバッグ実行は、ステップ インせずにメソッド呼び出しの下の次の行に渡されるだけです)、移動すると "Pointer(address) as ICar" と表示されます車の変数の上にマウスを置きます。私は何を間違っていますか?メソッドにステップインできることは、私のプロジェクトでは非常に重要です。

最近、Delphi XE8 がクリーン マシンにインストールされましたが、アンチウイルスはインストールされていません。