简单到不能再简单的问题---大家来抢分啊(50分)

  • 主题发起人 主题发起人 xiao.lit
  • 开始时间 开始时间
to xiao.lit:
有道理,delphi有自动管理内存的机制,不同于C++builder,在一个实体作用域结束时自动析构。
但这里有个问题,以下这段代码:
var
obj1,obj2:TMyobj;
begin
obj1 := TMyObj.Create;
obj2 := TMyobj.Create

obj1 := obj2;
end;
原obj1的值变成了指向obj2的地址,原obj1所指向的对象变得无法访问,不止是用户,就是delphi自己
也无法访问,。dephi会在end时会尝试自动释放obj1,obj2不错,但事实上此时的obj1,obj2指向同一对象,
他无法知道还有一段没有释放的内存其这段空间的其它信息(大小等),也无法去释放它。
其实这也是delphi与c++builder的一个重要差别,但过于依赖这种便利,必然会留下后患。
 
C++ 中的对象是可以在出作用域时自动析构, 但Delphi似乎就不能了

比方说如果有一个 Button1:=TButton.Create(Form1);
则Form1析构时Button1也随之释放,但是若
Button1:=TButton.Create(nil);
则要求手动释放。

 
多人接受答案了。
 
后退
顶部