Supponiamo di avere una classe myClass < handle
. Da Mathworks Help page on clear
,MATLAB - esegui il distruttore di oggetti quando usi 'clear'?
La cancellazione degli handle di handle di grafica non rimuove gli oggetti stessi, né elimina gli oggetti rimuovendo le variabili che memorizzano le loro maniglie.
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
Così clear
ing un oggetto maniglia non rimuove dalla memoria a meno che non esplicitamente delete
per primo ..
ho specificato un distruttore per myClass
di fare una corretta pulizia e rimuovere alcuni riferimenti ad esso; questo distruttore non viene chiamato su clear
. È possibile chiamare quel distruttore quando il mio oggetto è cancellato?
EDIT: Devo dire che, mentre delete
si chiama automaticamente con un clear
se non ci sono riferimenti all'oggetto myClass
, ho un'altra classe, dire myOtherClass
con proprietà che si riferiscono a myClass
, diciamo myOtherClass.a
. Esistono inoltre altre proprietà in myOtherClass
che non sono proprietà di myClass
, ma dovrebbero essere vuote se anche myOtherClass.a
è vuoto. Fammi sapere se questo non ha senso, potrebbe essere stato un po 'troppo verboso.
Esistono sicuramente altri riferimenti all'oggetto persistente; parte del motivo per cui vorrei che questa funzionalità fosse perché mi sbarazzavo di quei riferimenti nel mio distruttore. Ho aggiornato il PO con le informazioni pertinenti; potrebbe non avere senso senza il contesto completo, ma il contesto completo non è rilevante per la domanda in particolare. –
Ho avuto problemi simili, specialmente quando creavo elementi personalizzati della GUI. Non penso sia possibile forzare la chiamata del distruttore quando si cancella la variabile. Come si nota nella tua domanda, potresti voler semplicemente chiamare il metodo delete sul tuo oggetto prima di cancellarlo. – hoogamaphone
Solo per FYI, penso che sia una buona funzionalità che il distruttore non sia chiamato con clear sia usato nel terminale quando si usa una GUI con codice orientato agli oggetti (che ho trovato per lo più nel caso). Ciò significa che se l'utente usa 'clear' per sbaglio, il tuo gui non si spegne, anche se l'handle del gui viene cancellato dallo spazio di lavoro. Tuttavia, se l'utente chiama 'delete' sul manico, il distruttore verrà comunque eseguito. – Justin