Supongamos que tengo una clase myClass < handle
. Desde el Mathworks Help page on clear
, tratamiento de gráficos mangoMATLAB - ¿ejecuta el destructor de objetos cuando usa 'borrar'?
de compensación no elimina los objetos mismos, ni tampoco la eliminación de los objetos eliminan las variables que almacenan sus asas.
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
Así clear
ing un objeto mango no lo elimina de la memoria a menos que explícitamente se delete
primera ..
he especificado un destructor para myClass
hacer la limpieza adecuada y eliminar algunas referencias a ella; este destructor no se llama al clear
. ¿Es posible llamar a ese destructor cuando mi objeto está despejado?
EDIT: Debo mencionar que, si bien delete
es llamado automáticamente con un clear
si no hay referencias al objeto myClass
, tengo otra clase, por ejemplo myOtherClass
con propiedades que hacen referencia a myClass
, decir myOtherClass.a
. También hay otras propiedades en myOtherClass
que no son propiedades de myClass
, pero deben estar vacías si myOtherClass.a
también está vacío. Avíseme si eso no tiene sentido, eso podría haber sido demasiado prolijo.
Ciertamente hay otras referencias al objeto persistente; Parte de la razón por la que me gustaría esta funcionalidad es porque me deshago de esas referencias en mi destructor. Actualicé el OP con la información relevante; podría no tener sentido sin el contexto completo, pero el contexto completo no es relevante para la pregunta en particular. –
Tuve problemas similares, especialmente al crear elementos personalizados de la GUI. No creo que sea posible obligar al destructor a ser llamado cuando borre la variable. Como nota en su pregunta, es posible que desee simplemente llamar al método de eliminación en su objeto antes de borrarlo. – hoogamaphone
Solo para su información, creo que es una buena funcionalidad que el destructor no se llame con clear se usa en el terminal cuando se usa una interfaz gráfica con código orientado a objetos (que en su mayoría he encontrado que es el caso). Esto significa que si el usuario usa 'clear' por accidente, su interfaz gráfica de usuario no se apagará, incluso si el controlador de la GUI se borra del área de trabajo. Sin embargo, si el usuario llama a 'delete' en el manejador, el destructor seguirá ejecutándose. – Justin