掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
関数がクラスのインスタンスを返してくる場合 (ID:8005)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
まとめると function DoSomething(const Src: TBitmap): TBitmap; var Dest: TBitmap; begin Assert(Assigned(Src)); Dest := TBitmap.Create; { Srcのデータを使用してDestを加工 } Result := Dest; end; という(他人)が作ったプログラムをメモリリークしないように 処理するには?ということで最終的には procedure TForm1.Button1Click(Sender: TObject); var Bitmap: TBitmap; begin Bitmap := DoSomething(Image1.Picture.Bitmap); try Bitmap.SaveToFile(ExtractFilePath(Application.ExeName) + 'Result.bmp'); finally // DoSomething内で Bitmapが生成されているので、ここで破棄させる Bitmap.Free; end; end; で解決したわけですね。 この書き方ならリークはありませんが、他の方法でDoSomethingが呼ばれると 問題があるかもしれないのでFunction化などして、どこか1カ所で管理した ほうが良いでしょう。 時間が経ってからこのソースを見てどうしてこんな書き方しているのかな? ということがないようにしっかりコメントをつけておくことをお奨めします。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.