Dan*_*hoa 11 oop matlab destructor matlab-class
假设我有一堂课myClass < handle.从Mathworks帮助页面上clear,
清除句柄图形句柄不会删除对象本身,删除对象也不会删除存储其句柄的变量.
hf = figure; % Creates figure object, stores handle in variable hf
delete(hf) % Removes figure object, but not the variable hf
clear hf % Removes hf from the workspace; figure could still exist
Run Code Online (Sandbox Code Playgroud)
所以clear句柄对象不会将其从内存中删除,除非我先明确delete它.
我指定了一个析构函数myClass来进行适当的清理并删除一些引用; 这个析构函数没有被调用clear.当我的对象被清除时,是否可以调用该析构函数?
编辑:我要提的是,虽然delete自动与一个名为clear如果有到无的参考myClass对象,我有另一个类,说myOtherClass与参考性质myClass,说myOtherClass.a.还有其他属性myOtherClass不是属性myClass,但如果它们myOtherClass.a也是空的,它们应该是空的.如果这没有意义,请告诉我,这可能有点过于冗长.
And*_*nke 12
清除对句柄类对象的所有引用将从内存中删除它,并且将在被销毁的对象上自动调用delete您的方法myClass.这只是令人遗憾的令人困惑的术语.你myClass是一个"MCOS类"或"MCOS对象",而不是像help clear所说的"处理图形对象" .它们是不同的东西,至少在M代码级别.
句柄图形"对象"与myClass不是同一类型的"对象",返回的"句柄图形句柄" figure()与handle您继承的类名称不同.help clear谈论"处理图形句柄"的那段话并不适用于你的对象.请参阅doc handle并按照delete相关doco方法的链接进行操作.
不要心疼; Matlab doco没有明确区分这些区别.(IIRC它甚至没有明确使用术语"MCOS";它只是将它们称为"对象".)基本上,doco中"面向对象编程"部分下的材料与"对象"的类型相关, "处理"你正在努力myClass."图形"和"GUI开发"下的doco正在谈论另一种处理图形类型的"对象"和"句柄".我认为他们使用术语"句柄"来处理图形的东西和"处理类"的OOP东西.
要验证你的delete作品,只需做一个简单的课程.
classdef myClass < handle
methods
function delete(obj)
disp('delete was called');
end
end
end
Run Code Online (Sandbox Code Playgroud)
然后创建一个并清除它.
>> x = myClass
x =
myClass handle with no properties.
Methods, Events, Superclasses
>> clear x
delete was called
>>
Run Code Online (Sandbox Code Playgroud)
如果未调用析构函数,则可能存在对象延迟的其他引用.每次清除保存对象引用的变量时,只有当清除了引用(或间接引用)的最后一个变量时,才会调用析构函数.