下面是一个自己定义的类,代码很简单;
..........
Tmy_object=class(TObject)
private
FValue: Integer;
public
constructor Create(Avalue:integer);
destructor Destroy; override;
function showstring:string;
end;
..................
constructor Tmy_object.Create(AValue: Integer);
begin
inherited Create;
FValue := AValue;
end;destructor Tmy_object.Destroy;
begin
Form1.Memo1.Lines.Add('my_object.Destroy');
inherited Destroy;
end;function Tmy_object.showstring: string;
begin
Result := 'The integer is:' + IntToStr(FValue);
end;
//点击button事件
procedure TForm1.Button1Click(Sender: TObject);
var
ccc:Tmy_object;
begin
memo1.Lines.Clear;
Form1.Memo1.Lines.Add(ccc.showstring);
end;
问题:
1.我在点击button后在memo1中出现'The integer is:-685053757',我不明白我并没有用Tmy_object创建ccc的实列啊!
为什么能够访问showstring呢?2.如改为: begin
memo1.Lines.Clear;
ccc:=Tmy_object.Create(5);
ccc.Destroy;//ccc.free;好象free和destroy是一样的;
Form1.Memo1.Lines.Add(ccc.showstring);
end;
我在点击button后在memo1中出现'my_object.Destroy
The integer is:5',
我已经销毁了ccc怎么还会可以使用,destroy和free好象变的没什么意义了?
..........
Tmy_object=class(TObject)
private
FValue: Integer;
public
constructor Create(Avalue:integer);
destructor Destroy; override;
function showstring:string;
end;
..................
constructor Tmy_object.Create(AValue: Integer);
begin
inherited Create;
FValue := AValue;
end;destructor Tmy_object.Destroy;
begin
Form1.Memo1.Lines.Add('my_object.Destroy');
inherited Destroy;
end;function Tmy_object.showstring: string;
begin
Result := 'The integer is:' + IntToStr(FValue);
end;
//点击button事件
procedure TForm1.Button1Click(Sender: TObject);
var
ccc:Tmy_object;
begin
memo1.Lines.Clear;
Form1.Memo1.Lines.Add(ccc.showstring);
end;
问题:
1.我在点击button后在memo1中出现'The integer is:-685053757',我不明白我并没有用Tmy_object创建ccc的实列啊!
为什么能够访问showstring呢?2.如改为: begin
memo1.Lines.Clear;
ccc:=Tmy_object.Create(5);
ccc.Destroy;//ccc.free;好象free和destroy是一样的;
Form1.Memo1.Lines.Add(ccc.showstring);
end;
我在点击button后在memo1中出现'my_object.Destroy
The integer is:5',
我已经销毁了ccc怎么还会可以使用,destroy和free好象变的没什么意义了?
我还是有点不懂,ccc.destroy后,对象ccc应该不存在了啊!类的方法应该通过对象来访问,可对象没有被创建怎么能够使用对象来访问类方法呢?
ccc:=nil和ccc.destroy在本质上有什么区别?
我发现用ccc:=nil或是freeandnil(ccc)后就不能使用ccc来访问类方法了这是为什么呢?
谢谢!
if Obj<>nil then
Obj.Destroy
(2)Destroy销毁对象,但是销毁完以后,你的对象引用并不是nil,而是指向一块不确定的内存,这个时候再使用该对象的行为是未定义的。良好的写法是:
Obj.Free;
Obj:=nil;
当然,如果你的对象是一个全局变量,简单调用FreeAndNil(Obj)即可