Size: a a a

cxx.Дискуссионная

2020 April 18

TS

Till Schneider in cxx.Дискуссионная
Till Schneider
Там можно вроде пометиь деструктор мембер переменной как кидайщий исключения, тогда и дефолтный деструктор будет кидать вроде как, но это не точно
Я не читал текст английский,
источник

O

Ofee in cxx.Дискуссионная
Roy Mustang
а что если это исключение будет отловлено функцией выше?
Ничего, откуда нам знать, что оно было кинуто или отловлено?
источник

RM

Roy Mustang in cxx.Дискуссионная
Ofee
Ничего, откуда нам знать, что оно было кинуто или отловлено?
Я просто пытаюсь понять, как программа будет отрабатывать, пойду тестану
источник

RM

Roy Mustang in cxx.Дискуссионная
не уверен, что мои тесты будут верными
источник

Е

Егор in cxx.Дискуссионная
Roy Mustang
Я предполагаю что если soo бросит исключение, то в boo (noexcept) произойдет terminate? Даже если foo выше пытается ловить throw
если деструктор кидающий исключение вызван во время раскручивания стека то терминейт
источник

RM

Roy Mustang in cxx.Дискуссионная
Егор
если деструктор кидающий исключение вызван во время раскручивания стека то терминейт
А если это просто функции, как в примере выше
источник

O

Ofee in cxx.Дискуссионная
Roy Mustang
Я просто пытаюсь понять, как программа будет отрабатывать, пойду тестану
Если не кидать исключения — ошибок не будет
источник

/dev/urandon ¯\_(ツ)_... in cxx.Дискуссионная
Ofee
Non-throwing functions are permitted to call potentially-throwing functions. Whenever an exception is thrown and the search for a handler encounters the outermost block of a non-throwing function, the function std::terminate is called:
Удобно. Тогда ясно зачем libstdc++ делает двухфазовый проход по стеку при обработке эксепшена
источник

Е

Егор in cxx.Дискуссионная
Roy Mustang
А если это просто функции, как в примере выше
ну они в деструкторе вызываются7
источник

RM

Roy Mustang in cxx.Дискуссионная
Егор
ну они в деструкторе вызываются7
Нет
источник

RM

Roy Mustang in cxx.Дискуссионная
Егор
ну они в деструкторе вызываются7
Представь что в main вызывается foo
источник

Е

Егор in cxx.Дискуссионная
тогда зачем вы о деструкторах говорите я не пойму
источник

RM

Roy Mustang in cxx.Дискуссионная
Егор
тогда зачем вы о деструкторах говорите я не пойму
Мы рассматривали все варианты поведения noexcept
источник

Е

Егор in cxx.Дискуссионная
-fno-exceptions и дело с концом
источник

O

Ofee in cxx.Дискуссионная
Да я вот после ссылки Тилля не уверен в правдивости этой цитаты, ибо:
Non-throwing functions are permitted to call potentially-throwing functions. Whenever an exception is thrown and the search for a handler encounters the outermost block of a non-throwing function, the function std::terminate is called:
и
a noexcept specification is violated (it is implementation-defined whether any stack unwinding is done in this case)
несколько противоречиво звучат...
источник

/dev/urandon ¯\_(ツ)_... in cxx.Дискуссионная
[except.spec]
8 The exception specification for an implicitly-declared destructor, or a destructor without a noexcept-specifier, is potentially-throwing if and only if any of the destructors for any of its potentially constructed subobjects is potentially-throwing...

Отсюда и следует. Моя ошибка была в том, что я полагал, что noexcept(false) вообще запрещен для деструкторов
источник

TS

Till Schneider in cxx.Дискуссионная
Егор
-fno-exceptions и дело с концом
Знаешь, что будет при кидании исключения???
источник

Е

Егор in cxx.Дискуссионная
Till Schneider
Знаешь, что будет при кидании исключения???
будет бомба 😎
источник

TS

Till Schneider in cxx.Дискуссионная
Егор
будет бомба 😎
Terminate
источник

TS

Till Schneider in cxx.Дискуссионная
источник