Delphi Tips 
-----------------------------

0283  D1   D2   D3   D4   D5   D6   D7   3.1   95   98    作成: 1999/10/12 osamu rev 1.1
   B1   B3   B4   B5   B6   B7   NT3   NT4   2K   XP  更新: 1999/10/12 osamu 編集
Pascal 版 auto_ptr -- Free の必要の無い高機能ポインタ

[Delphi-ML:41732] で、C++ での auto_ptr にあたる高機能ポインタを Delphi 上で実現する方法を中村@NECさんが紹介してくださっています。使用後に Free することに煩わされること無く、TObject/record/MemoryBlock/string/自動配列 を動的に確保して利用することができます。

これを使うと、さまざまなリソースを変数と同じ寿命にしたり、レコードやオブジェクトが破棄されるときに、レコードやオブジェクトからポイントされているさまざまな資源を自動破棄できたりします。
finally より強力です。

技術的には、Interface の参照カウントと、System._Dispose を有効活用しています。_Dispose に付いては [Tips:282] も参照。

例:使用した レコードを自動破棄する

uses AutoPointer;

type
  TXXRecord = record
    str: string;
    :
    :
  end;

procedure TForm1.Timer1Timer(Sender: TObject);
var pRecord: ^TXXRecord;
    AutoPtr: IAutoPtr;
begin
  New(pRecord);
  AutoPtr := TAutoPtr.Create(pRecord, TypeInfo(TXXRecord));
    :
    :
end; // ここで レコードが自動破棄される
参照: [Delphi-ML:41732] [Tips:282] <PASCAL>

[新規作成] [最新の情報に更新]

How To
Lounge
KeyWords


Tips
Delphi
Home
Osamu Takeuchi osamu@big.or.jp