3

レコードに文字列リストを含めることは可能ですか? 例えば

TImportStats = record
  ATotal:Integer;
  BTotal:String;
  AList:TStringist;
end;

レコードを使用する前に作成する必要があると思いますか?

4

4 に答える 4

7

これは完全に合法ですが、別の方法を見つけるのが賢明かもしれません。あなたが言ったとき、あなたは問題を特定しました:

レコードを使用する前に作成する必要があると思います

それだけでなく、それを破壊するのにも良い時間を見つける必要があります. これを忘れた場合、エラーは発生しませんが、プログラムでメモリ リークが発生します。

レコードが文字列リストの所有者である場合は、クラス内に含める方がよい場合があります。そうすれば、文字列リストの作成と破棄は、すべての Delphi 開発者が慣れているコンストラクタ/デストラクタ パターンに従います。

レコードが文字列リストを所有しておらず、文字列リストの存続期間中にそれへの参照を取得するだけの場合、レコードは問題ありません。ただし、この方法で行う場合は、古い参照を持ち歩かないように、レコードの有効期間が文字列リストの有効期間内に含まれていることを確認してください。

于 2011-03-08T13:41:40.990 に答える
3

はい、これでうまくいくはずです。文字列リストを作成するまで、AList は使用できません。そのため、stringlist を作成せずにレコードの他の要素を使用できますが、使用する前に stringlist 要素を作成する必要があります。また、完了したら、各文字列リストを解放する責任があります。

于 2011-03-08T13:15:18.993 に答える
0

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.

于 2011-09-14T11:09:08.023 に答える
0

stringlist が TImportStats レコードのローカル スコープでのみ使用される場合は、Code Central でStringList 値の実装を確認することをお勧めします。

これにより、try、create、finally、destroy のオーバーヘッドが回避されます。

于 2011-03-08T22:02:15.770 に答える