在我的框架中,我有一个DataSource1实例,它在设计时被删除在Form上 在运行时的某个时刻,我需要将其“转换”为对另一个DataSource2的引用(在数据模块上)。
只需设置:
DataSource1 := DataSource2;
足以使DataSource1成为DataSource2的引用吗?看来DataSource1此时没有被销毁 - 它在DataSource2的所有者被销毁时被销毁,并且实际上有两个TDataSource实例。
或者我是否需要先显式释放DataSource1?
DataSource1.Free;
DataSource1 := DataSource2;
正确的方法是什么? (除了首先声明DataSource1作为参考)
答案 0 :(得分:4)
当您声明变量属于从TObject继承的类型时,您实际上是在声明一个指针。
调用构造函数时,您正在创建实例。构造函数返回指向该实例的指针。您通常将该指针指定给这样的变量:
Obj1 := TMyClass.Create;
您可以使用简单赋值为第二个变量指向或引用该实例:
Obj2 := Obj1;
通过调用Free:
来销毁对象Obj1.Free;
此时Obj2指的是一个不再存在的对象。我们说Obj2是陈旧的参考。
在您的情况下,您需要释放第一个对象: