Очистка всех ссылок на объект класса дескриптора удалит его из памяти, и метод delete
на вашем myClass
будет автоматически вызываться при уничтожении объекта.Это просто неудачная запутанная терминология.Ваш myClass
- это «класс MCOS» или «объект MCOS», а не «дескриптор графического объекта», о котором говорит help clear
.Это разные вещи, по крайней мере, на уровне кода М.
Графические «объекты» - это не тот тип «объекта», как у myClass, и «дескриптор графической ручки», возвращаемыйfigure()
- это не то же самое, что класс с именем handle
, от которого вы наследуете.Этот отрывок из help clear
, в котором говорится о «дескрипторах ручки графики», не относится к вашему объекту.См. doc handle
и перейдите по ссылке для delete
метода для соответствующего документа.
Не расстраивайтесь;Matlab Doco не делает эти различия очень четкими.(IIRC даже явно не использует термин «MCOS»; он просто называет их «объектами».) По сути, материал в разделе «Объектно-ориентированное программирование» в документе относится к виду «объект» и«ручка», над которой вы работаете с myClass
.В документах «Графика» и «Разработка GUI» говорится о другом виде графики дескриптора - «объект» и «дескриптор».Я думаю, что они используют термин «дескриптор» для графического материала дескриптора и «класс дескриптора» для материала ООП.
Чтобы убедиться, что ваш delete
работает, просто создайте тривиальный класс.
classdef myClass < handle
methods
function delete(obj)
disp('delete was called');
end
end
end
А затем создайте и очистите его.
>> x = myClass
x =
myClass handle with no properties.
Methods, Events, Superclasses
>> clear x
delete was called
>>
Если ваш деструктор не вызывается, могут существовать другие ссылки на задержку объекта.Деструктор не вызывается каждый раз, когда очищается переменная, содержащая ссылку на объект, только когда очищается последняя переменная, содержащая ссылку (или косвенную ссылку).