How to efficiently preallocate an array of handle objects

Hi, I'm looking a fast and proper method to preallocate an array of objects, where the corresponding class is a handle class.
So far, I came across the following methods. But I'm not sure whether all of them are really preallocating the needed space.
1) Is this really preallocating the needed space?
x=myClass.empty(1e5,0);
2)
x(1:1e5) = myClass( param1, param2 );
3) I think this only work if the constructor accept nargin=0, right?
x(1e5) = myClass( param1, param2 );
4) In the case the class also inherits from matlab.mixin.Copyable
x= repmat( copy( myClass( param1, param2), 1e5,1 );

Réponses (1)

To preallocate the object array, assign the last element of the array first. MATLAB® fills the first to penultimate array elements with default ObjectArray objects.

2 commentaires

This is option #3 in the question. As the OP stated, it only works if the constructor is designed to accept 0 arguments.
Furthermore, the behaviour for handle object is far from ideal. You'll end up with an array of n-1 duplicate handles and a different handle at the end, instead of n different handles, as explained in the doc.
So which method would be considered best practice in this case?

Connectez-vous pour commenter.

Catégories

En savoir plus sur Operators and Elementary Operations dans Centre d'aide et File Exchange

Question posée :

le 30 Mar 2015

Commenté :

le 11 Mar 2023

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by