◆过程中声明了类类型的局部变量,并且创建了他的实例,过程结束后这个变量会怎样?
------------------------------
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementationuses Unit2;{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
var
Form3: TForm1;
begin
Form3 := Tform1.Create(Self);
Form3.Show;
end;end.
------------------------------
局部变量放在栈中,在过程结束后有可能被其它数据覆盖掉。
我想问的是:
1:这个Form3是在栈中建立的还是在堆中?2:在过程结束后它所占用的内存区域是否还有效?3:能不能被其它的数据所覆盖掉?4:这个窗体稳定吗?5:如果将Self换成nil在呢?6:如果将Form3的声明放在TForm1的私有域中呢?
------------------------------
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementationuses Unit2;{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
var
Form3: TForm1;
begin
Form3 := Tform1.Create(Self);
Form3.Show;
end;end.
------------------------------
局部变量放在栈中,在过程结束后有可能被其它数据覆盖掉。
我想问的是:
1:这个Form3是在栈中建立的还是在堆中?2:在过程结束后它所占用的内存区域是否还有效?3:能不能被其它的数据所覆盖掉?4:这个窗体稳定吗?5:如果将Self换成nil在呢?6:如果将Form3的声明放在TForm1的私有域中呢?
解决方案 »
- 在form上显示一个BMP图片的问题。。新手
- 如何在access里面的sql语句里面与string 字符串比较
- 不用前台循环.不用后台SQL,如何在ClientDataSet上实现这样的统计
- 能不能不将JPEG流不放到IMAGE里面就将其缩小?
- 李维<<ADO/MTS/COM+高级程序设计>> P406页 为什么老是报错: Invalid data packet ??? 代码如下
- WIN2000中编译问题
- mapx中的绑定与专题图的问题
- dbgrid中自定义显示的格式,运用editformat
- 再问用DELPHI联EXCEL的问题!
- 怎样用DELPHI实现,只删除指定文件夹内的文件,而不把文件夹一起删除?!答对一定给分
- 如何实现这种图,并且如何定位
- 能否得到一个打开的txt文本,当前光标是处在哪一行?
2. 有效
3. 可以覆盖,但后果自负
4. 稳定
5. 为什么不试一下?
6. 所有的Delphi对象都隐含引用计数,将Form3放在私有域将保持一个引用,
但通常不会对程序的运行造成影响。
堆中2:在过程结束后它所占用的内存区域是否还有效?
有效3:能不能被其它的数据所覆盖掉?
应该不会4:这个窗体稳定吗?
没什么不稳定的5:如果将Self换成nil在呢?
Self换成nil必须自己释放,
未改时由Self管理其生命周期6:如果将Form3的声明放在TForm1的私有域中呢?
没多大差别
但是如果Form3这个指针在过程退出的时候清掉了,那么为什么我在窗体上再放一个button并Click并用Form3.Show还能显示出Form3??
是不是因为Form3这个指针所在的内存只是被标志为没有被引用,但是还没有被其它数据覆盖?那么这时用Form3.Show是不是不安全的??
var
Form3: TForm1;
begin
Form3 := Tform1.Create(Self);
Form3.Show;
end;写以这样也可以.Tform1.Create(Self).Show;
◆◆◆to:ZyxIp(绝望中...)
但是如果Form3这个指针在过程退出的时候清掉了,那么为什么我在窗体上再放一个button并Click并用Form3.Show还能显示出Form3??
是不是因为Form3这个指针所在的内存只是被标志为没有被引用,但是还没有被其它数据覆盖?那么这时用Form3.Show是不是不安全的??
}
上面这些话我打错了。Form3是局部变量在其它过程中根本无法引用!当时不知道在想什么呢!我想,如果声明局部变量的Form,那么在建立时就不应该使其owner为nil,不然在过程中如果不释放它,那么过程结束后(程序结束前)如果没用全局变量保存它的指针或句柄就无法释放它!!如果反复的执行这样的过程会消耗很多的内存,并且在程序结束前无法释放。