Deleted Account
сделай отдельный метод "initFileConnection"
Aleksei
И зачем второй раз в конструкторе объявляешь?
Deleted Account
он будет делать m_infile. open(filename)
Deleted Account
m_infile перенеси внутырь класса
Deleted Account
Deleted Account
но вообще кидать в сипипи эксепшоны это зашквар , я щитаю
Deleted Account
просто в конструкторах ненадо делать опасный код
Deleted Account
делай их в init
Vyacheslav
babysitter
Deleted Account
Deleted Account
правда я новичок ещё
Anonymous
понял, спасибо
не слушай дебилов, лучше спроси у них почему они считают что исключения зло вообще и\или в конструторах.
Зачем создавать объект, на половину инициализированный.
Зачем нам метод initFileConnection, когда есть конструктор.
Гради Буч считает что здесь имеет место быть племенная мифология
Aleksei
кто сказал, где написано
https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#Rf-noexcept
Note
Destructors, swap functions, move operations, and default constructors should never throw.
Только про дефолтные сказано
Deleted Account
Deleted Account
тока потом тот кто будет юзать втой код прокленёт тебя
Deleted Account
за такой кал
Anonymous
babysitter
я это знаю, практика совершенно нормальная. init нужен если у вас в проекте принципиально нельзя юзать исключения.
https://isocpp.org/wiki/faq/exceptions#ctors-can-throw
Deleted Account
ловить всё это дерьмо
Deleted Account
Deleted Account
=)
Anonymous
Deleted Account
Крылатый
А когда конструктор будет возвращать expected?
Vyacheslav
Вообще да, глянул на стековерфлоу, там говорят, что норм использовать эксепшены в конструкторах
Deleted Account
Vyacheslav
http://stackoverflow.com/questions/810839/throwing-exceptions-from-constructors
Anonymous
ну не
Судя по твоим высказыванием здесь, да.
Deleted Account
Крылатый
ЕМНИП.
Крылатый
Лень лезть в стандарт(
Deleted Account
Vyacheslav
Вообще логично - если в класс/конструктор передаем имя файла на открытие, а он не открылся - выходим с эксепшеном
Anonymous
Кеп
babysitter
Aleksei
Проблема с эксепшенами в том, что если в конструкторе была выделена память или заняты какие-то другие ресурсы, то надо перед выбросом все это почистить не забыть, т.к. деструктор вызван не будет
Anatoly
Просто убиваешь процесс и ОС все сделает за тебя. Норм! 👍
Aleksei
Ага, круто когда программа крашится, если не смогла файл открыть :) Даже не сказав ничего
Evgenii
Anatoly
нет эксепшенов, нет проблем.
Алдар
Aleksei
@snelius30 поднимай табличку :sarcasm: выше, а то не видно
Denis
Товарищи, можно ли сделать так, чтобы по Ctrl+C кидалось исключение? Пробовал поставить свой обработчик на SIGINT и кидать из него, но это работает через раз, и вообще в интернете пишут, что так делать не надо.
Anatoly
это тебе надо перехватывать ^c в терминале
Denis
И как это сделать?
Anatoly
Anatoly
ох, не просто это
Anatoly
ну почему именно ctrl-c ? может договоримся на скажем alt-v ?
Vyacheslav
http://stackoverflow.com/questions/1641182/how-can-i-catch-a-ctrl-c-event-c
Denis
У меня есть что-то вроде шелла: я набираю команды, он что-то считает и выдает результат. Иногда вычисление может быть долгим. Хотелось бы, чтобы по ctrl+c оно прерывалось, и шелл просил следующую команду, как в питоне.
Square
Denis
babysitter
тут нужно костылить через long jump
Square
Jvm way
https://habrahabr.ru/post/321856/
Denis
А память не потечет7
Deleted Account
Deleted Account
Denis
signal.h
И как из обработчика правильно кинуть исключение?
babysitter
babysitter
нельзя кидать исключение из обработчика, там стек не гарантируется правильный, это не совсем вызов функции
Denis
Как будет выглядеть стек после long jump?
Deleted Account
Deleted Account
ass fire triggered
Deleted Account
зачем сразу исключение
Deleted Account
просто ловиш сигинт, делаеш то чт охочеш
Denis
Почитай то, что я писал выше
Deleted Account
отправаляеш подсистеме запрос на остановку
Deleted Account
работы
Denis
Deleted Account
та которая в данный момент у тебя делает работу
Denis
У меня все в одном потоке
Deleted Account
которую ты хотел стопнуть
Deleted Account
сделай в нескольких