Delphi XE7(私はRAD Studioを使用しています)では、パッケージ内のコードをデバッグしようとしています。私は説明できない奇妙な状況に悩まされている。例えば、私は以下のような関数を持っています(注:私は実際にこの関数を使用しないので、この関数は何も指摘しません。私が直面している問題。)なぜデバッガはfor-inループのデストラクタをステップ実行しますか?
procedure TMyClass.DemoFunc();
var
pTest: TObjectList<TObject>;
pProperty: TObject;
begin
pTest := TObjectList<TObject>.Create;
for pProperty in pTest do
pProperty.ToString;
pTest.Free;
end;
私は上記のコードをデバッグするとき、私はデバッガが、私は上記の行にトレースしようとすると、私は
にジャンプラインpProperty.ToString;
に入ることに注意してください
destructor TObject.Destroy;
しかし、私の観点からは、pTestがはっきりと空でないので完全に非論理的なので、上記の行は決して呼び出されるべきではありません。
誰かが私にこの奇妙な行動を説明できますか?
注デバッグしようとしているコードはDelphiパッケージの中にありますが、関数はC++プロジェクトから呼び出されます。
よろしく
Embaは、基本コレクションにヒープ割り当ての列挙子を使用することに決めました。これは、開発者がヒープのコストの意味を理解していないかのようです。 –
これは代わりにfor-toループを使用する正当な理由かもしれませんか? –
大部分は問題ではありません。しかし、巨大なマシン上で深刻なマルチスレッドコードを実行している場合、メモリマネージャの競合が問題になる可能性があります。 –