Quelle est la différence entre ces 2 lignesSi le ARG_TYPE pour un CArray être const & ou non
CArray<MyClass, MyClass> MyArray
CArray<MyClass, const MyClass & > MyArray
Quelle est la différence entre ces 2 lignesSi le ARG_TYPE pour un CArray être const & ou non
CArray<MyClass, MyClass> MyArray
CArray<MyClass, const MyClass & > MyArray
La classe MyClass est toujours copiée dans la matrice. Mais le premier formulaire le copie deux fois: la première fois lorsqu'il est donné en paramètre à la fonction Add ou SetAt, la seconde fois en interne. Avec le second formulaire vous évitez la première copie.
Dans le premier cas, vous devez avoir accessable constructeur de copie MyClass
et MyClass
sera passé par valeur (copié) dans certains membres de CArray
(dans CArray::Add
par exemple).
Je crois que cela copie toujours en interne, avec la façon dont CArray alloue de la mémoire. Vous pouvez éviter une copie supplémentaire, mais vous avez toujours besoin d'un opérateur de copie accessible au public. – Nick
Je suis curieux de savoir si même la deuxième ligne fonctionnerait ... –
Oui, c'est le cas, et je crois que la deuxième forme est le type de modèle par défaut pour les classes dans VS2010 (par exemple: CArray se développe en CArray ). –
Nick