Ошибка в c++ коде - сбивается ссылка

261
14 января 2018, 05:14

Здравствуйте! У меня не работает код:

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.

Answer 1

Классика - возврат ссылки на локальный (то бишь удаленный после выхода из функции) объект.

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.

READ ALSO
Алгоритм перебора

Алгоритм перебора

Вчера я написал вопрос об этой же задаче, слегка улучшил свой алгоритм, но всё таки хотел бы узнать как можно решить её алгоритмом перебора

257
Создать ImageView, чтобы она отображалась пока работает программа

Создать ImageView, чтобы она отображалась пока работает программа

Есть приложение, надо создать ImageView, чтобы она отображалась пока работает программа

229
JSP IllegalStateException и JasperException

JSP IllegalStateException и JasperException

Пишу crud приложение по примерам из открытых источниковПри открытии моего единственного jsp файла

432
Google MVP в картах

Google MVP в картах

Я хочу использовать MVP и картуДля первого запуска работает все идеально, но когда я вращаю телефон получаю NullExeption в addMarkersOnMap потому что GoogleMap...

401