从TFileStream派生类的问题?(140分)

  • 主题发起人 主题发起人 ccw128
  • 开始时间 开始时间
C

ccw128

Unregistered / Unconfirmed
GUEST, unregistred user!
我现在想从TFileStream中派生一个临时文件类TTempFileStream,该类在创建时先生成一
个临时文件,然后按照TFileStream的方式被程序读写,在释放时把这个临时文件关闭并删除。
代码如下:

TTempFileStream = class(TFileStream)
private
FTempFileName: string;
public
constructor Create(const TempPath: string);
destructor Destroy; override;
end;

constructor TTempFileStream.Create(const TempPath: string);
var
TempFileName: array[0..MAX_PATH] of Char;
begin
GetTempFileName(PChar(TempPath), PChar('CCW'), 0, TempFileName);
FTempFileName := TempFileName;
inherited Create(FTempFileName, fmOpenRead or fmShareDenyNone);
end;

destructor TTempFileStream.Destroy;
begin
inherited Destroy;
DeleteFile(FTempFileName);
end;

现在我发现其它Delphi继承类中inherited Create总是放在派生类的Create函数的第一句,
而inherited Destroy总是放在派生类的Destroy函数的最后一句。我的代码与此顺序不同,
但是又必须像现在这样才能达到我的目的。请问我这样写会不会有问题,抑或是否有更好
的写法,谢谢。
 
当然不会有问题,具体情况具体分析,不要默守陈规

我也经常这么干。
 
:)最好是放在最后,析构函数是释放资源,对象的管理方式是类似堆栈的方式,
先进后出,一般是后代先调用父类的构造函数来创建对象,再做一些小的调整,
所以要先调用父类的构造函数,释放完了自己的资源以后再释放父类创建的资源
符合我先说的原则,先进后出!
如果你学过C++,应该理解的更清楚!
 
呵呵,张大侠也发言了,不过你讲的是一般情况

但有一般就有特殊,在delphi的源程序中,也有大量倒置的情况,
只要资源的建立与释放没有问题就行了。

就本程序而言,显然是毫无问题的(至少我是这样看了)
 
:)
很多情况下确实没有必要这么写,
但是有的时候不这么写,程序出错的原因可能就在如此,
讲点规范还是比较好。
 
能讲规范当然讲了,
我指的是特殊情况嘛,如本程序:
destructor TTempFileStream.Destroy;
begin
DeleteFile(FTempFileName);
inherited Destroy;
end;
如果这样写,能行吗?
 

Similar threads

D
回复
0
查看
952
DelphiTeacher的专栏
D
D
回复
0
查看
889
DelphiTeacher的专栏
D
D
回复
0
查看
968
DelphiTeacher的专栏
D
D
回复
0
查看
796
DelphiTeacher的专栏
D
后退
顶部