Я бы сказал, что если вам не нужно что-то еще, просто используйте CArray<Type>
, и ARG_TYPE
будет по умолчанию const TYPE&
. На самом деле использование Type&
в качестве ARG_TYPE
не очень хорошая идея. Это теоретически позволяет CArray
изменить объект / значение, которое вы передали в соответствующий метод. Конечно, CArray
ничего подобного не делает, но лучше быть в безопасности.
Если вы посмотрите на исходный код, доступный в MS VC, вы увидите, что ARG_TYPE
используется в нескольких методах как тип для аргумента, который содержит новое значение для некоторых элементов массива, таких как
void SetAt(INT_PTR nIndex, ARG_TYPE newElement)
INT_PTR Add(ARG_TYPE newElement)
void SetAt(INT_PTR nIndex, ARG_TYPE newElement)
void InsertAt(INT_PTR nIndex, ARG_TYPE newElement, INT_PTR nCount = 1)
Если вы делаете выбор между Type
и const Type&
, то единственное, что влияет на это, - это сколько раз и какие данные будут скопированы. Когда значение передается по ссылке, фактически передается только указатель на него. Это действительно важно для объектов (дополнительный вызов конструктора копирования), но не имеет значения для простых типов. Конечно, вы можете попытаться сэкономить несколько байтов, принудительно копируя char
или short
, который меньше соответствующего указателя (32/64 бит в зависимости от платформы), но я не думаю, что это действительно стоит дополнительных проблем. Как я уже говорил, я думаю, что использование по умолчанию CArray<Type>
- это хороший способ, если у вас действительно нет причин для его изменения.