delphi中newinstance什么意思
和create有什么异同??var
  form2:TForm2;
begin
  form2.create;
  与form2:=TForm2.create(nil) 有什么区别?????
end;

解决方案 »

  1.   

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

  2.   

    代码没什么好写的,就是那样。建议你找本介绍DELPHI对象机制的书看看,会更明白一点,或者自己跟踪下DELPHI的源代码。
      

  3.   

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

  4.   

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

  5.   

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

  6.   

    看 TApplication.CreateForm 代码
      

  7.   

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

  8.   

    从使用的角度看
    var aFoo: TFoo;
    aFoo:=TFoo.Create 相当于 aFoo:=TFoo(TFoo.NewInstance).Create
    实际上constructor编译后的代码是这样:
    begin
      System._ClassCreate
      constructor中原来写的内容
      AfterConstruction
    endSystem._ClassCreate 的原型是:
    function _ClassCreate(AClass: TClass; Alloc: Boolean): TObject;
    其中第二个参数 Alloc 决定在 _ClassCreate 中是否调用 AClass.NewInstance。当编译器看到 TFoo.Create 的时候,将会生成 TFoo.Create(True) 的代码;而 aFoo.Create 将生成 aFoo.Create(Boolean(-1)) 的代码