Deleted Account
сделай отдельный метод "initFileConnection"
Aleksei
И зачем второй раз в конструкторе объявляешь?
Deleted Account
он будет делать m_infile. open(filename)
Deleted Account
m_infile перенеси внутырь класса
Vyacheslav
И зачем второй раз в конструкторе объявляешь?
спасибо! написал infile.open(filename) в конструкторе, все заработало но вообще да, согласен, что кидать эксепшены из конструктора не ок
Deleted Account
но вообще кидать в сипипи эксепшоны это зашквар , я щитаю
Deleted Account
просто в конструкторах ненадо делать опасный код
Deleted Account
делай их в init
Deleted Account
кто сказал, где написано
я те сказал, ясно?
Deleted Account
правда я новичок ещё
babysitter
я те сказал, ясно?
а, ну тогда вопросов нет
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
за такой кал
babysitter
я это знаю, практика совершенно нормальная. init нужен если у вас в проекте принципиально нельзя юзать исключения. https://isocpp.org/wiki/faq/exceptions#ctors-can-throw
Deleted Account
ловить всё это дерьмо
Deleted Account
=)
Deleted Account
Джун?
ну не
Крылатый
А когда конструктор будет возвращать expected?
Vyacheslav
Вообще да, глянул на стековерфлоу, там говорят, что норм использовать эксепшены в конструкторах
Deleted Account
Vyacheslav
http://stackoverflow.com/questions/810839/throwing-exceptions-from-constructors
Anonymous
ну не
Судя по твоим высказыванием здесь, да.
Крылатый
а он будет таоке возвращать?
Нет, он только this же возвращает.
Крылатый
ЕМНИП.
Крылатый
Лень лезть в стандарт(
Vyacheslav
Вообще логично - если в класс/конструктор передаем имя файла на открытие, а он не открылся - выходим с эксепшеном
Anonymous
Кеп
babysitter
А когда конструктор будет возвращать expected?
я не понял, это о чем речь вообще?
Aleksei
Проблема с эксепшенами в том, что если в конструкторе была выделена память или заняты какие-то другие ресурсы, то надо перед выбросом все это почистить не забыть, т.к. деструктор вызван не будет
Anatoly
Просто убиваешь процесс и ОС все сделает за тебя. Норм! 👍
Aleksei
Ага, круто когда программа крашится, если не смогла файл открыть :) Даже не сказав ничего
Anatoly
Лучше кернел паник сразу
это если ты модуль ядра пишешь, вариант! 👍
babysitter
Проблема с эксепшенами в том, что если в конструкторе была выделена память или заняты какие-то другие ресурсы, то надо перед выбросом все это почистить не забыть, т.к. деструктор вызван не будет
ну деструкторы для полей вызовутся же. то есть если у тебя там что-то грязное типа владеющего raw поинтера, то да. придется перехватить исключения из этого списка инициализации, подчистить и передать исключение выше.
Anatoly
нет эксепшенов, нет проблем.
Алдар
нет эксепшенов, нет проблем.
нет кода - нет проблем
Aleksei
@snelius30 поднимай табличку :sarcasm: выше, а то не видно
Denis
Товарищи, можно ли сделать так, чтобы по Ctrl+C кидалось исключение? Пробовал поставить свой обработчик на SIGINT и кидать из него, но это работает через раз, и вообще в интернете пишут, что так делать не надо.
Anatoly
это тебе надо перехватывать ^c в терминале
Denis
И как это сделать?
Anatoly
@snelius30 поднимай табличку :sarcasm: выше, а то не видно
А я вообще-то серьёзно, try/catch придумали враги народа
Anatoly
ох, не просто это
Anatoly
ну почему именно ctrl-c ? может договоримся на скажем alt-v ?
babysitter
ну почему именно ctrl-c ? может договоримся на скажем alt-v ?
прекращай. вместо ответа на вопрос торгуешься, не аргументируешь позицию. нечего сказать - не говори.
Vyacheslav
http://stackoverflow.com/questions/1641182/how-can-i-catch-a-ctrl-c-event-c
Denis
У меня есть что-то вроде шелла: я набираю команды, он что-то считает и выдает результат. Иногда вычисление может быть долгим. Хотелось бы, чтобы по ctrl+c оно прерывалось, и шелл просил следующую команду, как в питоне.
Denis
http://stackoverflow.com/questions/1641182/how-can-i-catch-a-ctrl-c-event-c
exit(1) не подходит, к сожалению
babysitter
тут нужно костылить через long jump
Square
Jvm way
https://habrahabr.ru/post/321856/
Denis
А память не потечет7
Denis
signal.h
И как из обработчика правильно кинуть исключение?
babysitter
И как из обработчика правильно кинуть исключение?
не слушай ты его, не читает, что мы пишем.
babysitter
нельзя кидать исключение из обработчика, там стек не гарантируется правильный, это не совсем вызов функции
Denis
Как будет выглядеть стек после long jump?
Deleted Account
ass fire triggered
Deleted Account
зачем сразу исключение
Deleted Account
просто ловиш сигинт, делаеш то чт охочеш
Denis
Почитай то, что я писал выше
Deleted Account
отправаляеш подсистеме запрос на остановку
Deleted Account
работы
Deleted Account
та которая в данный момент у тебя делает работу
Denis
У меня все в одном потоке
Deleted Account
которую ты хотел стопнуть
Deleted Account
сделай в нескольких