Кресты / Говнокод #24907 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
Vector_type(const Vector_type& m1) {
		if (this->size != m1.size) {
			if (this->size != 0)
				destroy_memmory();
			this->size = m1.size;
			this->M = new m_type[size];
			for (int i = 0; i < size; i++)
				this->M[i] = m1.M[i];
		}
		else {
			for (int i = 0; i < size; i++)
				this->M[i] = m1.M[i];
		}
	};
	Vector_type& operator = (const Vector_type& m1) {
		if (this->size != m1.size)
			throw "not right =";
		for (int i = 0; i < size; i++)
			this->M[i] = m1.M[i];
		return *this;
	};

Действительно что могло пойти не так? просто копировать приравнять, копировать, приравнять, копировать...

Запостил: cat_code cat_code, (Updated )

Комментарии (10) RSS

    • Да нет, в общем-то то.

      Вот не знаю,
      Vector_type v1 = v2;

      это вызов конструктора копирования, конструктор по умолчанию + присваивание или implementation-defined?
      Ответить
      • кароч руки из жопы настолько что запостить верный (т.е. неверный) бренч даже со второго раза не смог истана(не истенного решения) здесь:
        Vector_type(const Vector_type& m1) {
        if (this->size != m1.size) {
        if (this->size != 0)
        destroy_memmory();
        this->size = m1.size;
        this->M = new m_type[size];
        for (int i = 0; i < size; i++)
        this->M[i] = m1.M[i];
        }
        else {
        for (int i = 0; i < size; i++)
        this->M[i] = m1.M[i];
        }
        };
        Vector_type& operator = (const Vector_type& m1) {
        if (this->size != m1.size)
        "not right =";
        *this = Vector_type (m1);
        return *this;
        }
        Ответить
        • Пользуйся тегами [ code][/code], %username%!
          Просто в чем смысл проверки? Типа, один раз создаем вектор нужного размера, и чтобы дальше случайно не присвоить что-то другого размера?
          Ответить
          • просто логика изначально была следующей: необходим конструктор копирования - создан конструктор копирования...

            Необходимо перегрузить оператор присваивания, так чтобы он делал то же самое что и копирования если размеры одинаковые, ну ладно просто сделаем так-наш новый вектор равен копированию... и в итоге мы имеем бесконечное присваивание)
            Ответить
        • А, ну да. Лишняя аллокация-деаллокация.

          Стоп. Еще ж и в конструкторе использование неинициализированных полей. Которое проходит только потому, что их содержимое не совпадает с корректным size. В дебаге-то все будет работать, поскольку, как правило, память при выделении заполняется специальным значением, а вот в релизе будет рандомно падать.
          Ответить
          • даааааааааааа, в этом как раз и самое вкусное, когда не можешь понять где ты идиот, а дебаг говорит что всё ок)
            Но вечный цикл всё равно создаётся, до тех пор покуда в куче есть память.
            Ответить
              • И я...пока мне не показалось пАдазрительным, что чёт ошибка при выделении памяти, мол её больше нет...
                Ответить

Добавить комментарий

Переведи на "PHP", guest!

    А не использовать ли нам bbcode?


    8