レコードに文字列リストを含めることは可能ですか? 例えば
TImportStats = record
ATotal:Integer;
BTotal:String;
AList:TStringist;
end;
レコードを使用する前に作成する必要があると思いますか?
レコードに文字列リストを含めることは可能ですか? 例えば
TImportStats = record
ATotal:Integer;
BTotal:String;
AList:TStringist;
end;
レコードを使用する前に作成する必要があると思いますか?
これは完全に合法ですが、別の方法を見つけるのが賢明かもしれません。あなたが言ったとき、あなたは問題を特定しました:
レコードを使用する前に作成する必要があると思います
それだけでなく、それを破壊するのにも良い時間を見つける必要があります. これを忘れた場合、エラーは発生しませんが、プログラムでメモリ リークが発生します。
レコードが文字列リストの所有者である場合は、クラス内に含める方がよい場合があります。そうすれば、文字列リストの作成と破棄は、すべての Delphi 開発者が慣れているコンストラクタ/デストラクタ パターンに従います。
レコードが文字列リストを所有しておらず、文字列リストの存続期間中にそれへの参照を取得するだけの場合、レコードは問題ありません。ただし、この方法で行う場合は、古い参照を持ち歩かないように、レコードの有効期間が文字列リストの有効期間内に含まれていることを確認してください。
はい、これでうまくいくはずです。文字列リストを作成するまで、AList は使用できません。そのため、stringlist を作成せずにレコードの他の要素を使用できますが、使用する前に stringlist 要素を作成する必要があります。また、完了したら、各文字列リストを解放する責任があります。
I know it's probably late, but the most elegant way to solve your problem, would be to create a subclass of TStringList with ATotal and BTotal as the two new elements in it. Then you can simply create and destroy it as you see fit. This solution is clean and simple.
stringlist が TImportStats レコードのローカル スコープでのみ使用される場合は、Code Central でStringList 値の実装を確認することをお勧めします。
これにより、try、create、finally、destroy のオーバーヘッドが回避されます。