我有一个基于句柄的类,我需要创建一个矢量。一个简单的方法是在for循环中动态构造向量,但这会导致 mlint 抱怨变化的向量大小。
classdef HandleClass < handle
...
end
...
for i = 1:10
foo(i) = HandleClass();
end
我怀疑使用此方法分配大型复杂对象所需的资源问题。
comment in a previous thread描述了使用 repmat 函数创建矢量的有用方法。但是,@gnovice警告说,这样做会创建一个指向同一个对象的句柄向量。我已经对此进行了测试,看起来就是这样。
是否有一个技巧允许预先分配唯一句柄对象的向量而不使用 for 循环?
<小时/> 解决方案摘要
solution提供的SCFrench正确分配内存以创建对象向量。其他解决方案将创建向量,但不会分配内存。
foo(10) = HandleClass();
答案 0 :(得分:4)
似乎你可以通过调用所有非抽象类中的empty
方法来实现这一点。
foo = HandleClass.empty(10,0);
for i = 1:10
foo(i) = HandleClass();
end
答案 1 :(得分:2)
foo(10) = HandleClass();
这将默认填充foo(1)到foo(9)。
请注意,这只适用于HandleClass的构造函数不使用输入参数(即可以默认构造)。
答案 2 :(得分:0)
拥有默认构造函数,接受的答案就可以了。没有默认构造函数(HandleClass()
)返回没有足够的输入参数)我看到的最好的可能性是首先创建一个单元格:
foo=cell(1,10);
for ix=1:10
foo{ix}=HandleClass(ix)
end;
foo=[foo{:}];