Здравствуйте! У меня не работает код:
template<class T>Cl<T>& Cl<T>::operator + (Cl<T>& cl) {
Cl<T> newCl((this->size)+(cl.size));
//
return newCl;
}
template<class T>Cl<T>& Cl<T>::operator = (Cl<T>& cl) {
//
return *this;
}
int _tmain(int argc, _TCHAR* argv[])
{
//
Cl<int>cl1(10);
//
Cl<int>cl2(10);
//
cl1 = (cl1 + cl2);
//
}
При заходе в присваивание ссылка cl сбивается на непонятно что, в частности, size становится отрицательным и при попытке создать массив происходит bad_alloc.
Классика - возврат ссылки на локальный (то бишь удаленный после выхода из функции) объект.
template<class T>
Cl<T> Cl<T>::operator + (const Cl<T>& cl) const {
Cl<T> newCl((this->size)+(cl.size));
//
return newCl;
}
Так вот оно как-то лучше будет...
И да - вот тут тоже измените:
template<class T>Cl<T>& Cl<T>::operator = (const Cl<T>& cl) {
//
return *this;
}
а то не сработает при присваивании rvalue.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости