測試結果為:
然而我們將3*處代碼改成
ap.Release.DoPrintInt,則輸出結果為
因為Release方法已經通知智能指針不管理堆對象了。
同時,我們還可以把DoTestAutoPtr方法寫成這樣,或許這樣創建TTestClass對象更優美一些:
procedure DoTestAutoPtr;
var
tt: TTestClass;
begin
// 注意,此處要用New
tt := TAutoPtr<TTestClass>.New(TTestClass.Create(10)).Get;
tt.DoPrintInt;
// 不需要使用tt.Free;
end;