加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi对象分配vs:=

发布时间:2020-12-15 04:03:56 所属栏目:大数据 来源:网络整理
导读:有人可以解释之间的区别: (1.) newObj := TMyObject.Create;newObj.Assign(oldObj); 和 (2) newObj := oldObj; 在2. newObj和oldObj是否引用相同的单个对象? 很抱歉,如果之前已经涉及但很难搜索:= 解决方法 newObj := TMyObject.Create; newObj.Assign(ol
有人可以解释之间的区别:

(1.)

newObj := TMyObject.Create;
newObj.Assign(oldObj);

(2)

newObj := oldObj;

在2. newObj和oldObj是否引用相同的单个对象?

很抱歉,如果之前已经涉及但很难搜索:=

解决方法

newObj := TMyObject.Create; 
newObj.Assign(oldObj);

假设正确实现了Assign,这个

>创建一个新的TMyObject实例(通过Create)
>在变量newObj中存储对该实例的引用(通过:=运算符)
>执行oldObj的深层复制,使newObj成为oldObj的功能完全复制(通过Assign).

这里的最终结果是你有两个完全独立的TMyObject实例,在这一点上,它们是彼此的精确副本.

newObj := oldObj;

上面只是复制对oldObj的引用并将其存储在变量newObj中.在这种情况下,您仍然只有一个TMyObject实例,并且newObj和oldObj这两个变量都指向同一个实例.如果使用任一变量修改该对象的状态,则两者都将反映这些更改,因为它们都指向同一个基础对象.

这与上面的示例形成对比,在上面的示例中,您有两个单独的对象,其状态可以分开,因为两个对象都是独立修改的.

从概念上讲,对象(类)的变量通常称为“引用类型”.这种类型的变量基本上只是指针(如果这更熟悉).带引用类型的赋值(:=)仅复制对象的引用,而不复制对象本身.

唯一的例外是字符串类型,它具有许多引用类型的属性,但是由编译器管理,以多种方式表现为值类型(修改字符串会产生新的修改后的副本,而不是修改原始字符串,这可能是在别处引用).

另见:To copy from one object to another,can I assign the variables directly,or must I assign their properties individually?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读