经常看到重载Destroy函数时,里面有一句inherited语句?(25分)

  • 主题发起人 主题发起人 rainxue
  • 开始时间 开始时间
R

rainxue

Unregistered / Unconfirmed
GUEST, unregistred user!
经常看到重载Destroy函数时,里面有一句inherited语句?
如:
destructor TMylink.Destroy;
begin
inherited;
...
end;
请问inherited这个语句有什么作用?不要可以吗?
加inherited的作用是不是可以执行父类的Destroy函数?
 
1、继承。不要也可以,最好要。原则是没有内存泄漏。
2、是的。
 
应该放这个语句来执行父类的 Destroy.你上面的写法有问题,
该语句应该放在最后。
destructor TMylink.Destroy;
begin
...
inherited;
end;

而Create 的时候,应该先 inherited
 
先谢各位了
还有一个就是普通对象的释放就是调用free函数吗?
要不要在free后再跟
obj:=nil
语句?
对于COM接口好像只要obj:=nil即可释放对象
 
不需要
=nil 是COM 接口(对象)的释放方法
 
释放一个对象用free就行了。但free后DELPHI并不会自动将对象的变量置为nil,这在
程序以后的部分可能会造成麻烦。所以,free后手动把对象置为nil更好
 
发现:
创建COM接口时,不要nil时只要变量超出了它的作用域它就会自动释放掉
(注:我用的是Automation方式创建的COM)如:
procedure TfrmTest.btnTestClick(Sender: TObject);
var
numTest1:ICOM20021014;
begin
numTest1:=coCOM20021014.Create;
end;
但是如果创建的普通的对象,如果没有free操作,即时超出它的作用域也不会自动释放。
procedure TForm1.Button1Click(Sender: TObject);
var
v:TClass5;
begin
v:=TClass5.Create;
end;
 
后退
顶部