В Matlab у меня есть класс
classdef myClass
properties
% some properties here...
end
methods ( Access = 'public' )
function obj = myClass()
% constructor...
end
function obj = delete( obj )
% suppose to be destructor...
fprintf(1, 'delete\n');
end
end % public methods
end
Каково поведение по умолчанию Matlab, когда я clear переменная типа myClass?
Например:
>> m = myClass();
>> clear m
Я ожидал бы, что Matlab вызовет деструктор m на этом этапе, но похоже, что это не так!
Мои вопросы:
-
Как принудительно вызвать деструктор при
clearс переменной? -
Является ли это поведение по умолчанию Matlab в каком-то смысле? Не логичнее ли вызывать деструктор при
clearпеременной? -
Возможно ли, что классы Matlab не имеют метода detructor (т.е. не существует метода по умолчанию, который следует вызывать при уничтожении класса)? Или я чего-то не хватает?
-
Возможно ли, что только классы, полученные из
handle, имеют деструктор (методdelete)?
Спасибо!
EDIT: после ответ Jonas, краткое резюме:
Matlab имеет два типа классов: классы значений (по умолчанию) и (производные от суперкласса handle). Классы значений имеют тенденцию обеспечивать лучшую производительность, однако они не имеют функциональности деструктора.
handle классы имеют функцию деструктора: delete, которая вызывается, когда класс уничтожается. См. этот вопрос из более подробной информации о деструкторах класса handle.
Если кто-то хочет иметь деструктор-подобную функциональность для классов значений, ответ Jona предлагает метод, использующий функциональность onCleanup.
Спасибо за хороший ответ и проницательные комментарии!