新しい TDictionary 型の使用を検討しました。しかし、QualityCentral では、TDictionary によって引き起こされる 2 つのメモリ リークについて読みました。
http://qc.codegear.com/wc/qcmain.aspx?d=67355
提案された回避策を実装しました。基本的には TDictionary をサブクラス化し、デストラクタをオーバーライドし、リークの原因となる 2 つのオブジェクトを手動で解放します。
destructor TMemCorrectedDictionary.Destroy;
begin
Values.Free;
Keys.Free;
inherited;
end;
問題は、Values と Keys が TDictionary の読み取り専用プロパティであるため、それらを nil に設定できないことです。念のために言っておきますが、今はすべて問題なく動作していますが、CodeGear がリークのパッチをリリースし、2 つのオブジェクトをそれぞれのデストラクタで再び解放したらどうなるのだろうと考えました。アクセス違反になりませんか?
読んでくれてありがとう(そしてうまくいけば答えてくれる)。