value类与handle类析构函数的区别
value类
- value类没有析构函数,自己定义的delete函数不会由MATLAB自动调用,只能由用户手动调用obj.delete()。
handle类
- handle类对象离开其作用域时,会自动调用delete。
- 重载的delete函数必须具有以下几点:
function delete(obj)
···
end
- 方法只接受一个参数(参数不能是varargin),且该参数必须是 对象obj本身。
- 方法不允许是Sealed、Static或Abstract,但可以是private(这样不能在外部显式地直接调用delete方法)。
如果不满足以上任何一点,还可以作为一个普通方法调用,但不会被MATLAB自动调用。
- handle类delete调用后会释放该obj指向的数据,不会销毁此obj,但它会变为一个无效的句柄,可以重新赋值。
h1=handle();
h2=handle();
h1.delete(); %销毁h1指向的数据;
h1=h2; %给h1重新赋值;
h2.delete(); %销毁h1和h2共同指向的数据;
- MATLAB销毁局部handle对象(如在函数中没有被输出的对象)时不会影响另一个指向相同数据的handle类对象,只是把数据上的引用计数减一。
- 并非所有局部对象离开了作用域后都会被自动销毁(User-Manager Object)。
- 子类调用delete方法时,会强制调用基类delete方法,即使基类delete方法被生命成了私有Access=private。