析构函数有没有正常析构对象呢,那个create函数好像没什么用吧
protected
constructor CreateInstance; //Constructor
class function AccessInstance(Request: Integer): TToolManager;
public
procedure Create; //??????????????
destructor Destroy; override; //??????????????
class function Instance: TToolManager;constructor TToolManager.CreateInstance;
begin
inherited Create;
FActiveTool := nil; //成员变量
Tools := TList.Create; //成员变量
end;class function TToolManager.AccessInstance(Request: Integer): TToolManager;
{$WRITEABLECONST ON}
const FInstance: TToolManager = nil;
{$WRITEABLECONST OFF}
begin
case Request of
0: ; //返回FInstance
1: if not Assigned(FInstance) then FInstance := CreateInstance; //返回非nil FInstance
2: FInstance := nil; //返回nil
else
raise Exception.CreateFmt('Illegal request %d in AccessInstance', [Request]);
end;
Result := FInstance;
end;procedure TToolManager.Create;
begin
inherited Create;
raise Exception.CreateFmt('Access class %s through Instance only', [ClassName]); //抛出异常?????
end;destructor TToolManager.Destroy;
var
i : Integer;
begin
if AccessInstance(0) = Self then AccessInstance(2); //这句算什么?????
for i := 0 to Tools.Count - 1 do
TAbstractTool(Tools.Items[i]).Free;
Tools.Free;
inherited Destroy;
end;class function TToolManager.Instance: TToolManager;
begin
Result := AccessInstance(1); //这句应该是返回对象
end;
protected
constructor CreateInstance; //Constructor
class function AccessInstance(Request: Integer): TToolManager;
public
procedure Create; //??????????????
destructor Destroy; override; //??????????????
class function Instance: TToolManager;constructor TToolManager.CreateInstance;
begin
inherited Create;
FActiveTool := nil; //成员变量
Tools := TList.Create; //成员变量
end;class function TToolManager.AccessInstance(Request: Integer): TToolManager;
{$WRITEABLECONST ON}
const FInstance: TToolManager = nil;
{$WRITEABLECONST OFF}
begin
case Request of
0: ; //返回FInstance
1: if not Assigned(FInstance) then FInstance := CreateInstance; //返回非nil FInstance
2: FInstance := nil; //返回nil
else
raise Exception.CreateFmt('Illegal request %d in AccessInstance', [Request]);
end;
Result := FInstance;
end;procedure TToolManager.Create;
begin
inherited Create;
raise Exception.CreateFmt('Access class %s through Instance only', [ClassName]); //抛出异常?????
end;destructor TToolManager.Destroy;
var
i : Integer;
begin
if AccessInstance(0) = Self then AccessInstance(2); //这句算什么?????
for i := 0 to Tools.Count - 1 do
TAbstractTool(Tools.Items[i]).Free;
Tools.Free;
inherited Destroy;
end;class function TToolManager.Instance: TToolManager;
begin
Result := AccessInstance(1); //这句应该是返回对象
end;
解决方案 »
- 关于delphi枚举类型的调用的问题?谢谢大家
- 请问怎么根据DBGridEh标题栏的标题找到相应栏的字段名呢
- 这个存储过程这么写?
- ServerSocket的连接过了几个钟就不行了,要重启动软件才行,到底怎么会事???
- listview加载数据的速度特别慢
- 菜鸟提问题:一个数据库的问题
- 关于hint的问题
- 一个简单的问题,我查了很多书都不能解决,那位老大可以帮帮我?我是新手!!
- 通过API获得某个窗体的HANDLE,再通过TCANVAS向该窗体画图,但该窗体不会AUTOREDRAW(该窗体只知道他的HANDLE)
- Can't load package dclite70.bpl
- TListBox自画时,如何支持背景和让背景色渐变
- 关于DELPHI恢复SSDT的问题
public
class procedure ReleaseInstance;class procedure TToolManager.ReleaseInstance;
begin
AccessInstance(0).Free;
end;还有,程序结束的时候我调用了ToolManager.Free;在析构函数那儿设断点,怎么没跳进去
前面构造的清楚了,还是不明白析构的时候为什么一定要用ReleaseInstance,而不能.free,还请指教一下哈
Procedure create ; <> destructor create ; // 所翠這個函數不是函造函數; 當然人家這樣寫,我們也不能說他錯。但至少實全實現的代碼應該原意不是通過這個片斷能解釋的。
我也觉得procedure create 应该改成constructor,虽然实际上关系不大