主要内容

复制对象

两种拷贝行为

MATLAB有两种基本类型®对象——句柄和值。

价值对象在复制操作方面的行为类似于MATLAB基本类型。副本是独立的值。对一个对象执行的操作不会影响该对象的副本。

处理对象由它们的句柄变量引用。句柄变量的副本引用同一个对象。在句柄对象上执行的操作在引用该对象的所有句柄变量中可见。

句柄对象复制

如果您正在定义类并希望支持句柄对象复制,请参见万博1manbetx实现句柄类的复制

值对象复制行为

MATLAB中的数值变量是值对象。例如,当你复制时一个对变量b时,两个变量相互独立。更改的值一个的值不改变b

A = 8;B = a;

现在重新分配一个b是不变的:

A = 6;b
B = 8

清算一个不影响b

清晰的一个b
B = 8

值对象属性

作为属性存储在值对象中的值的复制行为与数值变量相同。例如,假设vobj1值对象是否具有属性一个

vobj1。A = 8;

如果你复制vobj1vobj2,然后更改的值vobj1财产一个,被复制对象的属性值,vobj2.a,不受影响:

vobj2 = vobj1;vobj1。一个= 5; vobj2.a
Ans = 8

句柄对象复制行为

这里有一个句柄类HdClass它定义了一个名为数据

classdefHdClass < handle属性数据结束方法函数obj = HdClass(val)如果Nargin > 0 obj。数据= val;结束结束结束结束

创建该类的一个对象:

hobj1 = HdClass(8)

因为这个语句没有以分号结束,所以MATLAB会显示关于对象的信息:

hobj1 = HdClass,属性:Data: 8

的变量hobj1引用所创建对象的句柄。复制hobj1hobj2导致另一个句柄引用同一个对象:

Hobj2 = hobj1
hobj2 = HdClass属性:Data: 8

因为句柄引用对象,复制句柄将句柄复制到一个新的变量名,但句柄仍然引用相同的对象。举个例子hobj1句柄对象是否具有属性数据

hobj1。数据
Ans = 8

更改的值hobj1数据属性的值和复制对象的值数据属性也会发生变化:

hobj1。数据= 5; hobj2.Data
Ans = 5

因为hobj2而且hobj1是同一个对象的句柄,改变副本,hobj2,也会改变你通过句柄访问的数据hobj1

hobj2。数据= 17; hobj1.Data
Ans = 17

重新分配句柄变量

重新分配句柄变量产生的结果与重新分配任何MATLAB变量相同。当你创建一个对象并将其赋值给hobj1

hobj1 = HdClass(3.14);

hobj1引用新对象,而不是先前引用的对象(仍然由hobj2).

清除句柄变量

当您从工作区中清除一个句柄时,MATLAB将删除该变量,但不会删除另一个句柄引用的对象。但是,如果没有对对象的引用,MATLAB将销毁该对象。

鉴于hobj1而且hobj2,它们都引用同一个对象,你可以在不影响对象的情况下清除任意一个句柄:

hobj1。数据= 2^8; clear hobj1 hobj2
hobj2 = HdClass,属性:Data: 256

如果你清除了两者hobj1而且hobj2,则没有对对象的引用。MATLAB销毁对象并释放该对象使用的内存。

删除句柄对象

若要删除由任意数量句柄引用的对象,请使用删除。鉴于hobj1而且hobj2,它们都引用同一个对象,删除其中一个句柄。MATLAB删除对象:

hobj1 = HdClass(8);Hobj2 = hobj1;删除(hobj1) hobj2
hobj2 =删除HdClass的句柄

使用清晰的从工作空间中删除变量。

修改对象

当您将对象传递给函数时,MATLAB将对象的副本传递到函数工作区。如果函数修改对象,MATLAB只修改函数工作区中对象的副本。句柄类和值类之间复制行为的差异在这种情况下很重要:

  • Value object -函数必须返回对象的修改副本。若要修改调用者工作区中的对象,请将函数输出分配给同名变量

  • 句柄对象——函数工作区中的副本引用相同的对象。因此,该函数不必返回修改后的副本。

句柄或值类测试

要确定对象是否是句柄对象,请使用isa函数。如果obj是某个类的对象,此语句决定ifobj句柄:

isa (obj,“处理”

例如,容器。地图类创建句柄对象:

Hobj =容器。地图({“红袜队”“洋基}, {“波士顿”“纽约”});isa (hobj“处理”
Ans = 1

hobj也是容器。地图对象:

isa (hobj containers.Map)
Ans = 1

查询类。hobj说明它是a容器。地图对象:

类(hobj)
Ans =容器。地图

函数返回对象的特定类。

相关的话题