Очень похоже на то, что у вас есть wsg50
ссылка на переменную в вашем классе Instrument Control App
, в том случае, когда вы очищаете переменную из рабочей области, потому что на нее все еще ссылаются в другом месте, это не deleted
.
Давайте рассмотрим простой пример:
classdef myClass < handle
properties
name = '';
end
methods
function delete ( obj )
fprintf ( '%s being deleted\n', obj.name );
end
end
end
Справа давайте запустим некоторый код:
var = basicClass;
var.name = '123';
Если мы очистим эту переменную, вы увидите delete
называется:
>> clear var
being deleted
Если мы повторно запустим этот код и сделаем ссылку в другом месте:
var = basicClass;
var.name = '123';
otherReference.var = var;
Если смотреть на обе переменные, они одинаковы (как и ожидалось):
>> var
var =
myClass with properties:
name: '123'
>> otherReference.var
ans =
myClass with properties:
name: '123'
Так что же произойдет, если мы clear
var
и посмотрим на другую ссылку
clear var
otherReference.var.name
>> otherReference.var
ans =
myClass with properties:
name: '123'
Мы можем видеть, что переменная класса жива, как и должно быть, поскольку это не имеет значения чем класс, являющийся входом для функции, и когда эта функция завершает работу, локальная копия этой переменной удаляется из области видимости.
Если мы действительно хотим удалить переменную, вы можете сделать следующее, когда вы явно запустите метод деструктора:
var = basicClass;
var.name = '123';
otherReference.var = var;
delete(var);
otherReference.var.name
Строка delete
дает нам:
123 being deleted
Пока мы смотрим на otherReference.var
, мы получаем:
Invalid or deleted object.
Это фактически удалит переменную, и вы увидите, что otherReference
теперь указатель на инвалид ручка d.