在MATLAB中,我们可以删除一个对象
o = obj();
delete o;
Run Code Online (Sandbox Code Playgroud)
我们可以显式删除数组中的对象吗?
arr = {obj(), obj(), obj()};
delete arr{1}; % ???
Run Code Online (Sandbox Code Playgroud)
另外,如果我们明确地调用delete,MATLAB会释放内存吗?
首先,这条线
delete o;
Run Code Online (Sandbox Code Playgroud)
不会做你认为它做的事情.在命令语法中,o被解释为字符串,这将删除当前工作目录中名为"o"的文件.
如果要删除对象,o
则需要使用函数语法,即
delete(o); % where o is an object in the workspace.
Run Code Online (Sandbox Code Playgroud)
但是,这不符合您的想法!"删除"会破坏句柄引用的对象,即图形对象句柄(如图)或从句柄超类继承的matlab对象.请注意,"handle"变量o
本身仍然在您的工作区中,它指向一个现在已删除的对象!
如果您拥有的只是一个普通的变量/对象而您只想将其从工作区中删除,那么您只需要clear
它.
其次,arr不是'数组',它是一个单元阵列.这是一个迂腐点,但是一个重要的点,因为matlab 确实允许正常的对象数组.
第三,是的,为了回答你的问题,有一种方法可以显式地删除/删除数组中的对象,从而将数组拼接回来.这样做的方法是将该元素的元素指定为空元素,即
arr = {obj(), obj(), obj()};
arr(1) = [];
Run Code Online (Sandbox Code Playgroud)
matlab的垃圾收集器处理引擎盖下的事情,你不需要在这个意义上明确处理内存.