В 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
.
Спасибо за хороший ответ и проницательные комментарии!