2010-11-10 2 views
0

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 
+0

Je suis curieux de savoir si même la deuxième ligne fonctionnerait ... –

+0

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

Répondre

1

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.

1

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).

+0

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

Questions connexes