如:
 Tmyclass = class
 private
   fstrvalue:string;
 public
   property strvalue: string read fstrvalue;
   function dosomthing():string;
 end;
--------------------------------------------------------- 
 var
   mystr: string;
   myclass : Tmyclass;
---------------------------------------------------------
执行下面语句,在程序结束之后会不会造成内存泄漏:
---------------------------------------------------------
1,myclass:= Tmyclass.create;
  myclass:= Tmyclass.create;
  myclass:= Tmyclass.create;
  ....
  myclass:= Tmyclass.create;  freeandnil(myclass);
---------------------------------------------------------
2.mystr:= Tmyclass.create.strvalue;

解决方案 »

  1.   

    Tmyclass.create;是在堆中分配的内存吧,如果不正确free,应该是会泄漏的
      

  2.   

    那应该如何处理?
    ===========================================================================
    对象Create后,再次Create前必须Free.如果是动态建立控件且已经插入到Form或者其他容器中(如TPanel)不必Free
      

  3.   

    destructor TObject.Destroy;
    begin
    end;procedure TObject.Free;
    begin
      if Self <> nil then
        Destroy;
    end;----------------------------------------------------------------------------
    TObject.Free什么都没做! 这如何解释?
      

  4.   

    TObject.Free什么都没做! 这如何解释?
    ===================================================================================
    Tobject.Free是和编译器衔接的,只要使用Free,编译器会自动插入代码的.
      

  5.   

    按搂住的意思,Tobject.Create也什么都没做,且不是没分配空间?
      

  6.   

    一个类变量,不用create这么多次吧要不就用list吧,每次create后,保存一下指针,留等待free时用
      

  7.   


     myclass:= Tmyclass.create;
     freeandnil(myclass);
     ...
     myclass:= Tmyclass.create;
     freeandnil(myclass);
    -----------------------------------------------------------------
     myclass:= Tmyclass.create;
     mystr:= myclass.strvalue;
     freeandnil(myclass);
    -----------------------------------------------------------------这样就没有问题了?
      

  8.   

    按搂住的意思,Tobject.Create也什么都没做,且不是没分配空间?----------------------------------------------------------------
    嗯,估计和constructor和destructor有关!
      

  9.   

    一个类变量,不用create这么多次吧要不就用list吧,每次create后,保存一下指针,留等待free时用
    ----------------------------------------------------------------------呵呵,这个例子主要是讨论这个用法而已,具体业务具体分析了!
      

  10.   

    一般象你这种频繁建立对象的情况,最好按do2008说的那样,用列表保存,或者用一个建立过程来处理,如:procedure CreateMyObject;
    begin
      if Assigned(myclass) then
        myclass.free;
      myclass := TMyClass.Create;
    end;
      

  11.   

    可惜了这个用法了,mystr:= Tmyclass.create.strvalue;
    --------------------------------------------------------不过也没有办法,按规则行事! 谢谢各位,结贴!