如何初始化类句柄的向量?

时间:2011-10-24 17:56:40

标签: matlab object vector handle

我有一个基于句柄的类,我需要创建一个矢量。一个简单的方法是在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();

3 个答案:

答案 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{:}];