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

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

編輯:Delphi

然後我們寫一個控制台程序做試驗:

program TestClassicalAutoPtr;
{$APPTYPE CONSOLE}
uses
   SysUtils,
   ClassicalAutoPtr in 'ClassicalAutoPtr.pas';
type
   TTestClass = class
   public
     constructor Create; virtual;
     destructor Destroy; override;
     procedure DoPrint;
   end;
{ TTestClass }
constructor TTestClass.Create;
begin
   Writeln('Create');
end;
destructor TTestClass.Destroy;
begin
   Writeln('Destroy');
   inherited;
end;
procedure TTestClass.DoPrint;
begin
   Writeln('DoPrint');
end;
procedure DoTest;
var
   tt: TTestClass;
begin
   // 首先創建一個堆對象
   tt := TTestClass.Create;
   // 創建一個智能指針,並把堆對象的引用傳入智能指針,由智能指針管理堆對象
   TClassicalAutoPtr.New(tt);  // 2*
   tt.DoPrint;
end;
begin
   DoTest;
   Readln;
end.

代碼執行結果如下圖所示:

如果我們將代碼2*處替換成

TClassicalAutoPtr.Create (tt);

執行結果將看不到Destroy,析構函數沒有被調用。因為由TClassicalAutoPtr.New返回的是一個interface,而TClassicalAutoPtr.Create返回的是一個Object。

這樣,我們一個簡單的智能指針就完成了。

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