用于对象初始化的Delphi类构造函数
我开发了一堂课,我需要我的对象能够掌握程序生命周期中发生的事情的“历史”。
type
TPipelineSimulator = class
private
class var history: TStringList;
class constructor Create;
class destructor Destroy;
//other code
public
class property bitHistory: TStringList read history;
//other code
end;
简单的实现是:
class constructor TPipelineSimulator.Create;
begin
history := TStringList.Create;
end;
class destructor TPipelineSimulator.Destroy;
begin
history.Free;
end;
类TPipelineSimulator
有一个正常的过程(不是类过程),它向history
变量添加字符串; 通过这种方式,我可以填充我的字符串列表并使用此代码访问它:
for k := 0 to a.history.Count-1 do
Memo1.Lines.Add(a.history.Strings[k]);
这是非常有用的,因为即使对象被创建然后释放(通常Free
里面的try-finally),我仍然可以访问字符串列表。 我有两个关于类构造函数和析构函数的问题。
该文档说构造函数被编译器自动插入初始化部分。 相反的情况发生在析构函数中。 这是否意味着如果我调用var a: TPipelineSimulator;
在按钮的onclick过程中,程序启动时会调用a
的类构造函数吗? 或者当我第一次致电该程序时?
如果发生异常(可能是我错误地超出了字符串列表的范围),我是否有内存泄漏的风险?
在第二点,我的意思是这样的。 如果StringList每次填充1个项目,则开始时下面的代码会导致出界错误几次:
showmessage(a.history.strings[10]);
尽管如此,我仍然可以访问字符串列表,而且我真的想知道这段代码是否危险。
1)类的构造函数是在执行该类的单元的初始化部分执行的 - 准确地说:紧接在初始化部分的代码之前。 对于析构函数来说,它是相反的。 单元的初始化顺序由编译器决定。
与初始化/终结部分代码的区别在于,只有在程序内部实际使用类时才执行类构造函数/析构函数。
2)只要类析构函数被调用,就不会发生内存泄漏(至少不会从该字符串列表中获取)。
链接地址: http://www.djcxy.com/p/60261.html