为什么有这样的问题?(10分)

  • 主题发起人 主题发起人 Tense
  • 开始时间 开始时间
T

Tense

Unregistered / Unconfirmed
GUEST, unregistred user!
type
TbaseObject = class(TObject) //建的一个类
public
ds: TDataSource;
constructor create;
procedure destroy;
end;
//下面为程序
constructor TbaseObject.create;
begin
ds := Tdatasource.Create(nil);
//为什么要这一句,不要的话就错了
inherited create;
end;

procedure TbaseObject.destroy;
begin
inherited destroy;
end;
//我不要的道理如下:ds 为类的一个属性,不需要建立,但程序中必须要建立?
 
当然会有这样的问题.
你的ds是这个类的一个成员变量(不管它是什么类型),是一个指针.
如果你在你的类中要用到它就必须先创建它.否则会出现地址访问错.
内在不使用它后要释放它.所以在你的析构函数中也有问题,如果你在你的类中其它地方没有
释放ds那么你应该在这里free它,否则至内存泄漏.
 
你的 ds: TDataSource;
没有加property关键字,所以不是属性,只是一个数据域而已。
 
谢谢,明白为什么要加ds的创建,但还有下面问题:
procedure TbaseObject.destroy;
begin
ds.free;
ds := nil;
//这句需要不需要,不明白,谢谢。
inherited destroy;
end;
为什么需要的话,因为我认为ds.free并不能保证ds的释放。只有ds := nil 才能安全。
但delphi的原代码中很少有多此一举的。
 
不需要,
 
不需要,
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
906
SUNSTONE的Delphi笔记
S
S
回复
0
查看
884
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部