type
Tabc=class
public
constructor Create;
Destructor Destroy;
end;
constructor Tabc.Create;
begin
....
....
....
end;
Destructor Tabc.Destroy;
begin
inherited;
end;
执行以下代码
var
temp:Tabc;
begin
temp:=Tabc.create;
temp.free;
end;发现temp并没有执行Tabc.Destroy;请问自定义的类是不是释放的时候一定要调用 Tabc.Destroy而不能使用free?
Tabc=class
public
constructor Create;
Destructor Destroy;
end;
constructor Tabc.Create;
begin
....
....
....
end;
Destructor Tabc.Destroy;
begin
inherited;
end;
执行以下代码
var
temp:Tabc;
begin
temp:=Tabc.create;
temp.free;
end;发现temp并没有执行Tabc.Destroy;请问自定义的类是不是释放的时候一定要调用 Tabc.Destroy而不能使用free?
解决方案 »
- Delphi7的ShellListView有Bug ?
- 100分求ADSI接口查询活动目录中用户的写法
- 为什么在登陆系统的时候出现[DBNETLIB][ConnectiionOpen (Connect().]Sql Server不存在或拒绝访问提示,但还是可以访问数据库
- 怎样释放内存
- 请教一个循环播放问题
- 在连接数据库查询时出现access violation
- 怎样使鼠标象没有一样(不光是屏蔽,是不显示也不能按)
- DBGRID有CHECKBOX的控件
- 在DBLookupComboBox如何输入拼音时,指向汉字所在的记录,详情请看!
- 求教各位:为什么我的存储过程不能用?
- TObject是编译器定义还是vcl定义的?
- 文件发送,请帖出源代码!
析构函数要标注override,在TObject基类中的已经定义有析构函数,它是个虚函数
你要这样 tabc= class
Destructor Destroy;override;
....
推荐《C++ 编程思想》《java编程思想》、《delphi面向对象编程思想》,前两本虽然不是delphi为底的书,但是面向对象的内容都是一样的。
procedure TObject.Free;
begin
if Self <> nil then
Destroy; // 在虚函数表中查询调用对应对象的destroy
end;你也可以在Tabc类中定义并实现一个free函数
type
Tabc=class
public
Destructor Destroy; // 隐藏掉基类的析构函数
procedure Free; // 定义一个Tabc对象自己的free函数
end;
。
procedure Tabc.Free;
begin
Destroy;
end;destructor Tabc.Destroy;
begin
ShowMessage('Tabc Destroy');
end;