程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> Delphi2009初體驗 - 語言篇 - 智能指針(Smart Pointer)的實現(4)

Delphi2009初體驗 - 語言篇 - 智能指針(Smart Pointer)的實現(4)

編輯:Delphi

三、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.

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved