2016-10-08 3 views
0

In MATLAB ein Array-Element löschen, können wir ein Objekt vonin MATLAB

o = obj(); 
delete o; 

Können wir explizit ein Objekt in einem Array löschen löschen?

arr = {obj(), obj(), obj()}; 
delete arr{1}; % ??? 

Gibt auch MATLAB den Speicher frei, wenn wir delete explizit aufrufen?

Antwort

5

Zunächst einmal, diese Linie

delete o; 

nicht tut, was Sie denken, es tut. In Befehlssyntax wird o als String interpretiert, und dies wird eine Datei namens "o" in Ihrem aktuellen Arbeitsverzeichnis löschen.

Wenn Sie das Objekt löschen möchten o dann müssen Sie funktionelle Syntax verwenden, das heißt

delete(o); % where o is an object in the workspace. 

Dies ist jedoch nicht das tut, was Sie denken, es entweder tut! „Löschen“ zerstört ein Objekt durch einen Griff verwiesen, das heißt Grafikobjekt (wie Plots) Griffe oder Matlab Objekte aus dem Griff vererben Super. Beachten Sie, dass sich die Variable "handle" o selbst immer noch in Ihrem Arbeitsbereich befindet und auf ein jetzt gelöschtes Objekt verweist!

Wenn das, was Sie haben, einfach eine normale Variable/ein Objekt ist und Sie es nur aus dem Arbeitsbereich entfernen möchten, verwenden Sie stattdessen einfach clear.

Zweitens, arr ist kein 'Array', es ist ein Zellen-Array. Dies ist ein etwas pedantischer Punkt, aber ein wichtiger, da Matlab normale Arrays von Objekten erlaubt.

Drittens, um Ihre Frage zu beantworten, gibt es eine Möglichkeit, ein Objekt in einem Array explizit zu löschen/zu entfernen, so dass das Array wieder zusammengefügt wird. Die Art und Weise, dies zu tun ist, indem als ein Element des Arrays ein leeres Element zuweisen, das heißt

arr = {obj(), obj(), obj()}; 
arr(1) = []; 

Matlab Garbage Collector kümmert sich um die Dinge unter der Haube, brauchen Sie nicht explizit in diesem Sinne Speicher zu handhaben.


PS. All das gilt auch für die Oktave.