在MATLAB中,我们可以通过
删除一个对象o = obj();
delete o;
我们可以显式删除数组中的对象吗?
arr = {obj(), obj(), obj()};
delete arr{1}; % ???
另外,如果我们明确地调用delete,MATLAB会释放内存吗?
答案 0 :(得分:5)
首先,这一行
delete o;
不符合您的想法。在命令语法中,o被解释为一个字符串,这将删除名为" o"的文件。在您当前的工作目录中。
如果要删除对象o
,则需要使用功能语法,即
delete(o); % where o is an object in the workspace.
但是,这不符合您的想法!
"删除"销毁句柄引用的对象,即图形对象句柄(如图)或继承自句柄超类的 matlab对象。请注意"句柄"变量o
本身仍在您的工作区中,它指向一个现在已删除的对象!
如果你拥有的只是一个普通的变量/对象而你只是想从工作区中删除它,那么你只需要clear
。
其次,arr不是一个数组'它是一个单元格数组。这是一个迂腐的问题,但是一个重要的问题,因为matlab 确实允许正常的对象数组。
第三,是的,回答你的问题,有一种方法可以显式删除/删除数组中的对象,这样就可以将数组拼接在一起。这样做的方法是将该元素的元素指定为空元素,即
arr = {obj(), obj(), obj()};
arr(1) = [];
matlab的垃圾收集器处理引擎盖下的事情,你不需要在这个意义上明确处理内存。
<小时/> PS。以上所有内容也适用于八度音阶。