将对象实例转换为另一个实例的引用?

时间:2014-01-12 12:14:01

标签: delphi delphi-7

在我的框架中,我有一个DataSource1实例,它在设计时被删除在Form上 在运行时的某个时刻,我需要将其“转换”为对另一个DataSource2的引用(在数据模块上)。

只需设置:

DataSource1 := DataSource2;

足以使DataSource1成为DataSource2的引用吗?看来DataSource1此时没有被销毁 - 它在DataSource2的所有者被销毁时被销毁,并且实际上有两个TDataSource实例。

或者我是否需要先显式释放DataSource1?

DataSource1.Free;
DataSource1 := DataSource2;

正确的方法是什么? (除了首先声明DataSource1作为参考)

1 个答案:

答案 0 :(得分:4)

当您声明变量属于从TObject继承的类型时,您实际上是在声明一个指针。

调用构造函数时,您正在创建实例。构造函数返回指向该实例的指针。您通常将该指针指定给这样的变量:

Obj1 := TMyClass.Create;

您可以使用简单赋值为第二个变量指向或引用该实例:

Obj2 := Obj1;

通过调用Free:

来销毁对象
Obj1.Free;

此时Obj2指的是一个不再存在的对象。我们说Obj2是陈旧的参考。

在您的情况下,您需要释放第一个对象: