Size: a a a

2020 July 06

AS

Alex Sandrov in pro.cxx
Хм, а это всегда так было?
источник

IZ

Ilia Zviagin in pro.cxx
Alex Sandrov
Ну так он не будет вызван, если в конструкторе бросить исключение
Вот сам деструктор не будет вызван, да. Если на { поставишь breakpoint, не попадёшь туда.
Но части этого деструктора будут вызваны.
источник

IZ

Ilia Zviagin in pro.cxx
Alex Sandrov
Хм, а это всегда так было?
Да
источник

AS

Alex Sandrov in pro.cxx
Окак, интересно. спасибо!
источник

RR

Roman Rubanenko in pro.cxx
🙈
источник

S

Serg in pro.cxx
но проблема исключений в деструкторах неразрешима
источник

IZ

Ilia Zviagin in pro.cxx
Serg
но проблема исключений в деструкторах неразрешима
Разрешима. Но это тут ни при чем
источник

S

Serg in pro.cxx
если их замалчивать через catch() то это такое себе решение
источник

IZ

Ilia Zviagin in pro.cxx
Serg
если их замалчивать через catch() то это такое себе решение
Другого нет
источник

AS

Alex Sandrov in pro.cxx
посмотрел в vs2017, деструкторы всех подобъектов зовутся откуда-то из рантайма сразу после вызова исключения
источник

S

Serg in pro.cxx
Stack unwind - самая сложная часть рантайма, ещё и переписывали её раз 5 минимум в VC
источник

AS

Alex Sandrov in pro.cxx
для меня просто был тонкий вопрос про дочерние объекты, так как я никогда не бросал исключения в конструкторах
источник

AS

Anatoly Shirokov in pro.cxx
Alex Sandrov
для меня просто был тонкий вопрос про дочерние объекты, так как я никогда не бросал исключения в конструкторах
правило там естественное, для всего, чтобы было сконструировано будет вызван деструктор при выбросе исключения в конструкторе объекта-агрегата
источник

S

Serg in pro.cxx
у C++ есть спец синтаксис для искдючений в конструкторе:


   Class()
   try // function-try block begins before the function body, which includes init list
     : Class( 0.0 ) //delegate constructor
   {
       // ...
   }
   catch (...)
   {
       // exception occurred on initialization
   }
источник

IZ

Ilia Zviagin in pro.cxx
Serg
у C++ есть спец синтаксис для искдючений в конструкторе:


   Class()
   try // function-try block begins before the function body, which includes init list
     : Class( 0.0 ) //delegate constructor
   {
       // ...
   }
   catch (...)
   {
       // exception occurred on initialization
   }
Этот синтаксис для любой функции применим.
источник

S

Serg in pro.cxx
не-не - он появился не сразу
инициализацию полей нельзя быыло охватить
источник

A

Alex in pro.cxx
Определения нешаблонных constexpr функций нельзя вынести в .срр?
источник

MZ

Max Ziua in pro.cxx
Нет
источник

A

Alex in pro.cxx
Спасибо, так и думал, но надежда теплилась
источник

АК

Александр Караев... in pro.cxx
.. потому что .cpp не знает про существование других .cpp
источник