gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 18:27:15 24 4
gpt4 key购买 nike

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

只是设置:

DataSource1 := DataSource2;

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

还是我需要先明确释放 DataSource1?
DataSource1.Free;
DataSource1 := DataSource2;

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

最佳答案

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

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

Obj1 := TMyClass.Create;

您可以通过简单的赋值使第二个变量指向或引用该实例:
Obj2 := Obj1;

对象通过调用 Free 被销毁:
Obj1.Free;

此时 Obj2 引用了一个不再存在的对象。我们说 Obj2 是一个过时的引用。

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

关于delphi - 将对象实例转换为另一个实例的引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21074479/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com