三、Delphi中的interface
從智能指針的簡介中我們可以了解到,要使用智能指針,我們必須得捕獲到棧對象的構造函數,將堆對象的指針傳入棧對象,由棧對象保存堆對象的指針;還必須捕獲到棧對象的析構函數,在棧對象的析構函數裡進行對構造函數所傳入堆對象指針delete。在c++很容易做到這一點,但是經上面分析,我們無法對Delphi的棧對象進行構造和析構的捕獲。
我們可以換一種角度思考,不一定非要是棧對象,只要在Delphi中能有一種東西,只要出了它的作用域,它就能自動析構!
Delphi中的interface能間接滿足我們這個需要,請看以下例子:
program TestInterface;
{$APPTYPE CONSOLE}
uses
SysUtils;
type
ITestInterface = interface
['{ED2517D5-FB77-4DD6-BC89-DF9182B335AE}']
procedure DoPrint;
end;
TTestInterface = class(TInterfacedObject, ITestInterface)
public
constructor Create; virtual;
destructor Destroy; override;
procedure DoPrint;
end;
{ TTestInterface }
constructor TTestInterface.Create;
begin
Writeln('Create');
end;
destructor TTestInterface.Destroy;
begin
Writeln('Destroy');
inherited;
end;
procedure TTestInterface.DoPrint;
begin
Writeln('DoPrint');
end;
procedure DoTest;
var
testInter: ITestInterface; // 1*
begin
testInter := TTestInterface.Create;
testInter.DoPrint;
end;
begin
DoTest;
Readln;
end.