1. C++ / Говнокод #3282

    +162

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    class Massiv{
          int *a;
    public:
           void Sozd(int k);
    };
    
    void Massiv::Sozd(int k)
    {
         a=(int *) malloc (sizeof(int) * (k+3));
    }

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

    Запостил: kir_rik, 20 Мая 2010

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

    • Больше того - это часто бывает оправданно.
      Я так делаю частенько.
      Ответить
    • А ещё добавьте свой деструктор с блек-джеком и шлюхами.
      Ответить
      • Будете смеяться, он есть

        void Massiv :: Del()
        { free(a); }
        Ответить
        • Не сомневался :))
          Ответить
        • :D
          програмисты шарпа и явы вам руки не подадут..
          Ответить
          • Да. В шарпе приходится делать свой деструктор, тк нормального языкового нет...
            Ответить
        • он еще и не виртуальный?
          Ответить
          • зачем?
            Ответить
            • Что-бы не было проблем с освобождением памяти если этот класс будет наследоваться
              Ответить
              • не очень представляю, зачем нужно наследовать класс с именем Massiv :) по-моему, это примитив.
                Ответить
                • Как, зачем?
                  Чтобы сделать smartMassiv с установкой и лаборантками.
                  Ответить
      • Деструктоп ~Udal()
        Ответить
    • Хм... а зачем создавать отдельную функцию? Можно ведь создать родной конструктор с 1 параметром, и не страдать потом херней типа a->Sozd(100500);
      Ответить
    • Есть такое понятие как фабрика, в данном коде конечно это и неоправданно. Но можно много вариантов придумать, когда конструктор не катит. А вообще если где-то ранее объявить объект, то могу пожелать удачи применить к нему конструктор второй раз.
      Ответить
      • А зачем к нему второй раз применять конструктор?
        Ответить
      • > Есть такое понятие как фабрика

        лишь бы умные слова сморозить, фабрика тут нахер не упёрлась. фабрика пригодна когда нужно создаавать и возвращать разные подклассы, закастенные под один надкласс. зачем оно тут?
        Ответить
    • А разве в классе без объявленного конструктора компилятор не генерит конструктор по-умолчанию (те самые 3 слова не резервирует)?
      По-моему генерит....
      Так что - реальный говно-код!!
      Ответить
    • Вот представьте себе такую гипотетическую ситуацию - во время выполнения malloc() в конструкторе вернул NULL. Тут либо надо заводить новый метод, например isValid() и дёргать его для проверки валидности объекта, либо кидать исключение, которое потом где-то надо ещё ловить, к тому же выделение памяти в конструкторе имеет некоторые неприятные побочные эффекты.

      Поэтому обычно и пишут подобный метод, а в конструкторе лишь инициализируют поля дефолтными значениями. Это надёжнее в смысле отлова будущих ошибок.
      Другое дело, что а) подобный метод обычно возвращает признак успеха или неудачи и б) освобождать память я бы предпочёл в деструкторе.

      Поэтому говнокод, но не сильно. Плюсовать не буду но и минуса не поставлю.
      Ответить
      • Много буков. Много бреда. Вам необходимо записаться на очередь в лечебное заведение.
        Ответить
      • Если в конструкторе malloc() вернул NULL, надо бросать исключение. И вообще, какого фига malloc()? Есть оператор new.
        Ответить
      • Представил
        Ответить
    • Я бы с удовольствием отпиздил мудня, который называет метод "Sozd" -- это просто пипец. А вот относительно инициализации не в конструкторе -- все ок, часто бывает действительно нужно, но тоже явно не в этом случае
      Ответить
      • мудень поумнел
        Ответить
        • Ни хера не понял, но если это ты меня лажаешь -- иди на хуй, а если нет -- то не иди =)
          Ответить
    • Sozd в крестах - это как в PHP __construct?
      Ответить
    • Из кoлeи выбилo кaпитaльнo и, приeхaв нa aвтoбусe oбрaтнo в Oзёры, купил в мaгaзинe вoдки, нaпился дoмa, в oднo лицo, дo свинскoгo сoстoяния.
      Ответить

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