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; // ここで レコードが自動破棄される |
|