ホーム > 開発 > Delphiでメモリ管理

Delphiでメモリ管理

思う所あって、Delphiで少し大きめのプログラムを書き始めました。
以前は漠然と、C++の代わりにはならないと思っていたのですが、JavaやRubyを使うようになって頭が柔らかくなったのかも知れません。
日に日に、悪く無いと思い始めました。

目下の懸案は、メモリ管理の煩雑さです。

  • 所有権が移動する、あるいは共有されるケースで煩雑になりやすい
  • 内部参照を返すメソッドと、複製を返すメソッドの使い分けにミスが発生しやすい
  • 例外安全に気を使うと、無駄にロジックが複雑になる事が多い

C++でも、3.0が登場する以前は似たような事をやっていたハズなのに、今ではちょっとキツいです(^_^;;

普段C++では、参照カウンタを持つ基底クラスとカウンタを管理するスマートポインタのテンプレートを使っています。
循環参照にだけは気を使いますが、ほとんど所有権を意識する必要は無いですし、例外安全を考慮してもかなり単純に記述出来ます。

Delphiでは、以下の方策が考えられます。

  • そのままがんばる
    ・・・・・・
  • interfaceを使う
    interface参照には、参照カウンタを自動管理する仕組みがあります。これには、C++のスマートポインタとほぼ同じような使用感が期待できます。ただし全域で使おうとすると、全てのクラスにinterfaceを用意する必要がありますし、クラス参照を使った技巧に制約が発生します。微妙。
  • ガベージコレクタを使う
    BoehmGCをDelphiに適応した強者を発見しました。良さそうな雰囲気ですが、ピアリソースを抱えている場合に明示廃棄を併用する必要がある事と、トラブルが出た時の対処が困難な事も想定されるので、少し腰が引けています。
  • 参照カウンタを明示的に管理する
    Objective-Cのような仕組みを、自前で用意する事も可能だと思います。コンテナ(コレクション)の類いは、参照カウンタに対応する物を自作する必要があるので、基礎工事が手間かもしれません。

あまりコードが増えると移行が大変なので、そろそろ決断が必要です。

広告
カテゴリー:開発 タグ:
  1. まだコメントはありません。
  1. No trackbacks yet.

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。