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

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
A* arr = new A[size];
std::vector<A*> vec(size);
for(size_t i=0; i<size; ++i)
	vec.push_back(&a[i])
// Do something with vec
delete[] arr;

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

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

    • Ваш код не эквивалентен вышеприведенному, не так ли?
      Ответить
      • Нет, но он короткий и исправляет говнистость исходного =)
        Ответить
    • все засунутые в вектор указатели были delete [] => в векторе wild pointers =)
      Ответить
      • Если вектор после приведенного кода прекращает житие - никаких проблем нет.
        Удаление указателей не ведет к вызову деструкторов объектов, на которые они указывают.
        Ответить
        • Как это не ведет? Как по вашему вызывается деструктор объекта? A::~A() чтоли?
          Ответить
          • А вот так вот и не ведет.
            В STL при деструкции контейнера вызываются деструкторы того что в контейнере расположено.
            Для объектов - вызываются деструкторы объектов.
            Для указателей - ничего не вызывается.
            Ответить
    • Код почти чистый:
      1. код бросает исключения как минимум
      2. ради красоты delete[] дублировать массив указателей, это по моему сликом.
      3. Зная длину массива, делать push_back ну как-то "расточительно" чтоли.
      4. Мне потребовалось минут 5 чтобы понять, что хотел сказать автор.
      Ответить

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

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

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


    8