пятница, 12 мая 2023 г.

[prog.c++] Хочется странного: особое отношение C++ного компилятора к структурам, объявленным как extern "C"

Я тут давеча в текущем проекте обновлялся с FFMPEG 4.4 на 5.1 и столкнулся с необходимостью использовать новый FFMPEG-шный тип AVChannelLayout.

В принципе, это обычная структура. Но не совсем. Там внутри может быть указатель, причем владеющий. А может и не быть (в простых сценариях его и не будет, насколько я понял). Но может и быть.

А раз может быть, то работать с экземплярами AVChannelLayout нужно по придуманным разрабами FFMPEG правилами: инициализация посредством нескольких (черезжопных, на мой взгляд) способов, копирование через av_channel_layout_copy, очистка перед уничтожением посредством av_channel_layout_uninit.

Но проблема в том, что С++ный компилятор про все эти правила не знает. Ну это же обычная структура, для которой C++ный компилятор тупо и автоматически прикручивает конструктор и оператор копирования.

Побитового копирования.

Что недопустимо для структур с владеющими указателями внутри.

И вот чтобы не наступать на грабли непреднамеренного случайного копирования одного экземпляра AVChannelLayout в другой мне захотелось странного: если C++ный компилятор видит структуру, которая объявлена как extern "C", то пусть он не генерирует для них конструктор и оператор копирования по умолчанию, а объявляет их как delete.

По идее, заголовочные файлы от чисто Сишных библиотек в C++ подключаются либо внутри extern "C" секций, либо же в этих заголовочных файлах добрые люди уже используют extern "C". Так что диагностика взятых из чисто Сишного кода структур будет весьма точной.

PS. Вообще, любопытно было столкнуться с типом вроде AVChannelLayout в C++ном коде. Если найду силы, то попытаюсь описать свои приключения/впечатления в отдельном посте. Но не обещаю, к сожалению. Будем посмотреть. Upd: вот и продолжение.

среда, 10 мая 2023 г.

[work.sadness] РБ огораживают от Swift-а и как-то ссыкотно становится...

Вынужден ссылаться на dev.by, но что есть, то есть: Приорбанку перекрывают переводы через Swift в USD (тыц и еще раз тыц). Вроде бы с EUR пока все работает, но невольно напрашивается вопрос "как долго"?

В общем, ссыкотно, т.к. у нас пока клиент из Европы, т.к. мы никого в РФ не заинтересовали и пришлось браться за то, что было, даже не смотря на сильно не наш профиль. К счастью, клиент классный, реально один из лучших заказчиков, с которыми приходилось иметь дело за всю карьеру.

И если Приору отрубят и переводы в EUR, то...

...То непонятно что делать, т.к. переезжать никуда не собираюсь. Видимо, останется надеятся на то, что в РФ услуги нашей крошечной компании кому-то да понадобятся.

PS. Работу программистом по найму не ищу, интересен только контракт для СтифСтрима. Если решусь закрыть компанию и начну искать для себя место в чьем-то штате, то об этом будет отдельный блог-пост :)

[prog.c++;blog;wow] Интересно, это уже успех или ещё нет? :)))

Посмотрел сегодя откуда ко мне в блог люди приходят. А тут такое:

Не меньне, не больше, а "быстрый ответ" в выдаче Яндекса по запросу "виртуальный деструктор C++ зачем нужен". Однако! :)

Если (а скорее когда) придется проходить собеседование по C++, то на вопрос о виртуальном деструкторе в C++ нужно будет показать этот скриншот.