<email@example.com> wrote in message news:firstname.lastname@example.org... > On May 18, 6:43 pm, "Nasser Abbasi" <n...@12000.org> wrote: > > <krindikzulm...@gmail.com> wrote in message > > > > news:email@example.com... > > > > > Do we have to do explicit memory cleanup in matlab > > > > No. See below > > > > http://www.mathworks.com/company/newsletters/digest/2008/sept/matlab-... > > > > "Object Life-Cycle Management > > MATLAB implements a strategy for object life-cycle management that > > supports > > destructors and destroys objects as soon as they become unreachable from > > any > > MATLAB workspace. The MATLAB language has always managed memory > > allocation > > by destroying workspace variables when a function exits, either through > > an > > error or through a normal return to the calling context. We wanted to > > preserve this simple model but also extend it to handle objects that > > might > > persist beyond the execution of a function (by being returned to a > > calling > > function or stored in some other object returned to a calling function). > > A MATLAB handle class can define a delete method that behaves very much > > like > > a destructor in languages like C++ (Figures 3a and 3b). In MATLAB, a > > delete > > method is called just before an object is destroyed because the object > > can > > no longer be accessed from any MATLAB variable. The delete method can be > > used to close a file, close an external application, or notify another > > object that needs to react to the destruction of the first object. It is > > defined by the handle class, and only handle classes have destructors in > > MATLAB. " > > > > "Some programmers might find it strange that non-handle objects have no > > destructors. Since MATLAB object destruction is always automated, a > > non-handle object that holds other objects does not need to do anything > > to > > destroy those other objects." > > > > --Nasser > > > Thanks. But I saw the above mentioned code from an experienced matlab > pro > > Even mathworks says below > "a non-handle object that holds other objects does not need to do > anything to > destroy those other objects" > > does this imply handle objects do have to clean objects inside them > explicitly?
When a non-handle object is no longer accessible, it and all its properties are cleared from memory just like normal variables when they go out of scope (like when the function whose workspace they are in exits.) If that non-handle object contains another object in one of its properties, then if that other object is a non-handle object it too will be cleared from memory; if it is a handle object, its delete method (if any) will be called, then it will be cleared from memory. Thus in neither of those situations do you, the user, need to do anything special.
When a handle object is no longer accessible, the same procedure as I described above happens, except that its delete method is called before it is cleared from memory. The reason the text above calls out non-handle objects, I believe, is because they operate somewhat differently than users may expect based on their experience with other object-oriented languages (in that they don't have destructors.)