我有一个对象,有一个属性用于存储和访问Canvas
   { TTemp }
   TTemp = class(TObject)
   private
     FCanvas:Canvas;
     procedure SetCanvas(const Value: TCanvas);
   protected
   public
     property Canvas:TCanvas;read FCanvas;write SetCanvas;
   end;
我在程序中因特殊需要,同时用两个TList(List1,List2)对多个TTest进行保存,当在List1中Free了其中一个TTest后,又在List2中Free相同的TTest会引发问题吗?会不会影响Canvas中的句柄?为什么有时我会影响系统本身的绘制?

解决方案 »

  1.   

    TList应该保存了你的TTest对象的地址,如果你在list1中已经free了一个TTest对象,那么list2中这个TTest的引用自然也无效了,所以这个时候再引用list2中的地址可能就指向不知道什么东西了,可能会导致系统错误
      

  2.   

    那TTest中保存的FCanvas也会一同被释放?那可是我从Form上取的!
    如果他将FCanvas也释放了,那肯定会导致系统绘制出问题!
      

  3.   

    那TTest中保存的FCanvas也会一同被释放?是的;
      

  4.   

    如果用的是TList.Delete是不是就没事了?
      

  5.   

    给多少分加一个▲啊?
    用delete是不是就不会有问题了?