Size: a a a

2021 July 26

Dv

Dr. Friedrich von Ne... in codingteam
Есть штука, которую спека языка ранее называла «деструктором», но больше не называет. Сейчас это называют «финализатор». И не считается хорошим тоном полагаться на них вообще.
источник

Dv

Dr. Friedrich von Ne... in codingteam
Есть сценарии, в которых они могут быть не вызваны при завершении приложения.
источник

EP

Egor Pugin in codingteam
да, вот примерно я об этом
источник

Dv

Dr. Friedrich von Ne... in codingteam
К слову, я и там не знаю способа вызвать код на выгрузке DLL из памяти.
источник

Dv

Dr. Friedrich von Ne... in codingteam
Хотя наверняка можно. Но пользоваться не доводилось, да и надобности такой не было. Обычно все ресурсы, которым нужна гарантированная инициализация/деинициализация, складывают в какой-нибудь dependency scope, а дальше уже контейнер этим управляет.

При этом предполагается, что такие ресурсы не должны быть объявлены как статики.
источник

D

Devel29A in codingteam
Вроде в винде есть DllMain и типа того же?
источник

Dv

Dr. Friedrich von Ne... in codingteam
Ну в нативных либах есть, да. И как раз вот там можно написать ручной код по деинициализации всяких статиков и т.п.
источник

D

Devel29A in codingteam
Угу
источник

Dv

Dr. Friedrich von Ne... in codingteam
Но это довольно стрёмная тема. Множество ограничений у кода, который выполняется в DllMain.
источник

А⚙

Антон ⚙️ in codingteam
Такого рода — да, сложно. Ибо я вообще не вижу причин писать настолько хрупкий код
источник

Dv

Dr. Friedrich von Ne... in codingteam
Хз что хрупкого в рекурсивной лямбде. Мне вот сложно это понять.
источник

D

Devel29A in codingteam
Вроде как человеческие либы предоставляют всякие init/fini API
источник

D

Devel29A in codingteam
ЧТобы никакого блядства не воротить
источник

Dv

Dr. Friedrich von Ne... in codingteam
Ну да, обычно, если у тебя плугабельная инфраструктура с динамической загрузкой плагинов (что довольно редко бывает, кажется?), то тогда лучше всего явно выдать API для инициализации и деинициализации плагинов.
источник

А⚙

Антон ⚙️ in codingteam
Как я уже говорил: это ненормально, что отсутствует/наличие UB зависит от факта (не)вызова функции. А так как объект захватывается по ссылке, его потом ещё и перемещать нельзя, поскольку это ссылку инвалидирует
источник

Dv

Dr. Friedrich von Ne... in codingteam
Я не понимаю, что ты там несёшь про UB.
источник

Dv

Dr. Friedrich von Ne... in codingteam
В рекурсивной лямбде, кажется, никакого UB нет?
источник

EP

Egor Pugin in codingteam
о чём речь? о рекурсивных лямбдах? я использую
источник

Dv

Dr. Friedrich von Ne... in codingteam
Да больной тут какой-то.
источник

Dv

Dr. Friedrich von Ne... in codingteam
Я уже присматриваюсь, как его ловчее упаковать.
источник