+ -
当前位置:首页 → 问答吧 → create newinstance请教

create newinstance请教

时间:2009-08-22

来源:互联网

delphi中newinstance什么意思
和create有什么异同??

var
  form2:TForm2;
begin
  form2.create;
  与form2:=TForm2.create(nil) 有什么区别?????
end;

作者: nosimiuy   发布时间: 2009-08-22

NewInstance不会执行构造函数,只会分配对象内存。

Create在执行的时候会先自动判断对象是否已分配内存,没有的话调用NewInstance来获取内存,然后再执行构造函数中的内容。

作者: Harryfin   发布时间: 2009-08-22

楼上说的有点理解
能不能 用代码 来配合解释说明一下????

作者: nosimiuy   发布时间: 2009-08-22

代码没什么好写的,就是那样。

建议你找本介绍DELPHI对象机制的书看看,会更明白一点,或者自己跟踪下DELPHI的源代码。

作者: Harryfin   发布时间: 2009-08-22

NewInstance 是分配内存
create 对象的执行范围

作者: sanguomi   发布时间: 2009-08-22

var
  aForm:TForm;
begin
  aForm:=TForm(TFormClass.NewInstance); 
  aForm.showmodal;
  aForm.Free;
  //这些代码好象 没有问题 那么如果说是NewInstance没有执行构造函数,只是分配内存空间
  //这个怎么也可以??

  //与下面的代码有什么区别
  aForm:=TForm.Create(nil);
  aForm.showmodal;
  aForm.Free;
end;

作者: nosimiuy   发布时间: 2009-08-24

你覆盖下constructor,在里面加句showmessage就会看出区别了。

作者: Harryfin   发布时间: 2009-08-24

看 TApplication.CreateForm 代码

作者: Seamour   发布时间: 2009-08-24

newInstance 与 create有所了解了

还有一个问题
TForm2.Create类的create函数
与对象的create函数有什么区别???
如:下面的例子,是对象的create函数
var
  aForm2:TForm2;
begin
 aForm2.Creat;
  ...
  ....

作者: nosimiuy   发布时间: 2009-08-25

从使用的角度看
var aFoo: TFoo;
aFoo:=TFoo.Create 相当于 aFoo:=TFoo(TFoo.NewInstance).Create
实际上constructor编译后的代码是这样:
begin
  System._ClassCreate
  constructor中原来写的内容
  AfterConstruction
end

System._ClassCreate 的原型是:
function _ClassCreate(AClass: TClass; Alloc: Boolean): TObject;
其中第二个参数 Alloc 决定在 _ClassCreate 中是否调用 AClass.NewInstance。当编译器看到 TFoo.Create 的时候,将会生成 TFoo.Create(True) 的代码;而 aFoo.Create 将生成 aFoo.Create(Boolean(-1)) 的代码

作者: Seamour   发布时间: 2009-08-26

xx

作者: nosimiuy   发布时间: 2009-08-29

作者: lyhoo163   发布时间: 2009-08-30

mark

作者: lonelyboySVC   发布时间: 2011-08-24

热门下载

更多