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

    +2

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    class pool_exeption: public std::exception
    {
        virtual  const char* what() const throw()
        {
            return "Pool out of bounds";
        }
    }pool_out_of_bounds;
    class pool_exeption2: public std::exception
    {
        virtual  const char* what() const throw()
        {
            return "Pool block is too small";
        }
    }pool_small_block;

    А потом эти исключения кидаются по значению: throw pool_out_of_bounds;
    virtual const char* WAT()

    Запостил: Yuuri, 18 Октября 2013

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

    • Я вот как раз сейчас читаю про Абрахамса, и вот задался вопросом: а кто управляет временем жизни самих исключений? И вообще как это происходит? Как их время жизни соотносится со стеком который они отматывают? Ведь, по-идее, они-то его переживают, но а что если нет, и вброс и поимка осуществляются в пределах одного кадра?
      Ответить
      • Исключения самодостаточны и должны содержать в себе контекст ошибки в виде копий объектов, а не ссылок/указателей на них. Объекты исключений размещаются в отдельном участке памяти, не на стеке.
        Ответить
        • показать все, что скрытоКакой багор)))
          Ответить
        • Ну вот а если объект, который ошибка с собой несет - это кнопка на форме, не создавать же новую кнопку ради ошибки?
          + под контекстом разные люди понимают разные вещи. Контекст может быть как в call/cc прям такой, что из него можно продолжить выполнение после ошибки, а может быть просто набор значений локальных для функции, а может быть локальные значения + глобальные...
          Ответить
          • показать все, что скрытоКакой багор )))
            Ответить
          • > не создавать же новую кнопку ради ошибки?

            В с++ мало что запрещено, можно в исключение что угодно положить. И кидать можно что угодно, хоть числа. Вопрос в том, готовы ли вы пережить пушечный выстрел в ногу от программистов, не умеющих управлять памятью.

            Идеология с++ - у каждого объекта должно быть понятное время жизни и минимально возможная область видимости. И всегда должен быть кто-то (ровно один), кто следит за временем жизни объекта.

            Например, с учётом последних изменений в стандарте, многие даже умные указатели с подсчётом ссылок считают подозрительными.
            Ответить
            • показать все, что скрытоКакой багор )))
              Ответить
            • > Например, с учётом последних изменений в стандарте, многие даже умные указатели с подсчётом ссылок считают подозрительными.
              Это чего это? Что ж там изменилось, что приводит к подобному?
              Ответить
              • показать все, что скрытоКакой багор )))
                Ответить
              • > Что ж там изменилось, что приводит к подобному?
                С вводом мув-семантики всё больше народу предпочитают pass-by-value. Тот копетан с GoingNative13 (::adobe::sean_parent) вообще призывает при возможности избегать всех видов указателей. Страуструп тоже нелестно высказывался о shared_ptr как о глобальных данных с непонятной областью видимости и временем жизни.

                Ну и подход с передачей всего и вся по шареному указателю только из-за нежелания понимать, какой класс за что отвечает и какой ресурс кому принадлежит (к моему удивлению, так довольно часто поступают) - однозначное говно.
                Ответить
                • Если байвалуе, то что они предлагают делать для быстрого перемещения? Делать скрытый внутри объекта пимпл для больших объектов и мовабельные поля для малых объектов?

                  К слову в гугле уникуе_птр запрещен для вытаскивания наружу интерфейса. А вот шаред_птр для вытаскивания наружу одобряют.
                  Ответить
                • показать все, что скрытоКакой багор )))
                  Ответить
                • > С вводом мув-семантики всё больше народу предпочитают pass-by-value. Тот копетан с GoingNative13 (::adobe::sean_parent) вообще призывает при возможности избегать всех видов указателей. Страуструп тоже нелестно высказывался о shared_ptr как о глобальных данных с непонятной областью видимости и временем жизни.

                  Крестопроблемы.
                  Ответить
          • >ошибка - это кнопка на форме
            Ты ошибся, когда взял формашлепку дельфей.
            Ответить
          • > если объект, который ошибка с собой несет - это кнопка на форме
            Отличная идея! Буду диалоги с сообщением об ошибке выбрасывать:
            void foo() {
                if (x == 42) {
                    throw new my::error_dialog("WTF?");
                }
            }
            
            int main() {
                try {
                    foo();
                } catch (my::dialog *d) {
                    d->exec();
                    delete d;
                }
                return 0;
            }
            Ответить
            • Ну если мы ненадолго отложим конкретно Ц++ в сторону, и посмотрим на теорию, то тут можно увидеть (и на это много кто указывает), что исключения являются очень близкими родственниками "продолжений". Т.е. это механизм в самой программе по управлению ее выполнением. И с этой точки зрения не правильно думать о том, что бросается объект (это просто частный случай продолжения a -> nil -> nil -> a). А вообще это "вычисление", которое перенесли на другой этап.
              Т.е. это скорее функция, если уж на то пошло. А что эта функция делает и с какими объектарми работает? - а почему это нас вообще должно интересовать / как-то ограничивать.
              Ну в том смысле, что а как это отличается от возврата из функции указателя? Все те же опасения должны остаться в силе.
              Ответить
            • Кстати, Visual ASSists содержит сниппеты, которые бросают исключение по указателю
              Ответить
            • показать все, что скрытоКакой багор )))
              Ответить
          • >Ну вот а если объект, который ошибка с собой несет - это кнопка на форме, не создавать же новую кнопку ради ошибки?

            А что только кнопка? почему не вся форма?
            Ответить
      • показать все, что скрытоКакой багор )))
        Ответить
    • > exeption
      noitp.exe
      Ответить
    • показать все, что скрытоКакой багор )))
      Ответить
      • показать все, что скрытоТы вновь и вновь пытаешься обратить наше внимание на себя. Поверь, твое упорство достойно лучшего применения. Напиши мне:
        [email protected]
        Человек я адекватный, никаких подстав, ничего никуда не сливаю, друзей не свечу. Просто пообщаться.
        Ответить

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