0

なぜメモリ リークが発生しないのかについての bummi のすばらしい説明にImage1.Picture := nilもかかわらず、その安全性は直感に反するため、私のコードを読んでいる新しい人々の心に赤信号が発生する可能性があることを懸念しています。したがって、私はそれを避けたいと思います。より直感的な代替手段は何ですか? bummi の回答は Delphi に関するものでしたが、実際には C++Builder にもっと興味があります。

4

4 に答える 4

0

写真が消えるように設定Image1.Visibleしました。false

  • 短所:次の画像を表示したいときに復元Visibleする必要があります。true
  • 利点: ある特定の画像を特定の時間だけ表示したい場合は、クリアして再読み込みするよりも表示を切り替える方が効率的です。
于 2014-08-24T12:47:39.353 に答える
0

読者が意味を理解していないことが心配で、image.Picture := nil;それが画像をクリアする最も簡単な方法であることがわかっている場合は、プロパティ セッターが何をするかを説明するコメントを追加してください。

ただし、変更が必要であることに必ずしも同意するわけではありません。プロパティ セッターが副作用を持つ可能性があることは十分に確立されており、Delphi には、プロパティを特定の値に設定した後、そのプロパティを再読み込みすると同じ値が返されるという規則はありません。実際、VCL では、設定した値と同じ値を返さないプロパティの方が一般的ではないかと思います。

いずれにせよ、コメントするかどうかに関係なく、そのまま使用して割り当てをnilそのままにします。

于 2014-08-24T13:03:21.953 に答える
0

プロパティの割り当てをカプセル化すると、次の 2 つの利点があります。

  1. 漏れがないことを文書化する単一の場所 ( DRY )
  2. 他の場所で使用するためのあまり気になりにくいインターフェイス

例えば:

// Not a memory leak: see http://stackoverflow.com/a/23999207/782738
#define ClearImage(Image) Image->Picture = NULL

于 2014-09-06T15:17:15.253 に答える