У меня есть шаблон класса с двумя функциями, выдержки показаны ниже;
template<class TYPE, class ARG_TYPE>
int MyClassT<TYPE, ARG_TYPE>::Add(ARG_TYPE newElement)
{
TYPE Element = newElement; <--- TYPE operator= not called, shallow copy
'
'
}
и
template<class TYPE, class ARG_TYPE>
void MyClassT<TYPE, ARG_TYPE>::SetAt(int nIndex, ARG_TYPE newElement)
{
,
,
m_pData[nIndex] = newElement; <--- TYPE operator= is called, deep copy
'
'
}
Почему первый случай приводит к мелкой копии, а второй - к глубокой? Я предполагаю, что в первом случае заменяется конструктор копирования, но не понимаю, почему.