Новое приватное поле в классе SDK сломало собранные клиентами плагины
Библиотека поставляется как .so с заголовком engine.h. В классе Engine добавили приватное поле std::mutex cacheLock_. Публичные методы не менялись. После обновления библиотеки плагины, собранные клиентами со старым заголовком, падают со случайной порчей памяти. Внутри команды каждое изменение engine.h пересобирает 400 файлов.
Какой приём решает обе проблемы?
- Pimpl: поля в скрытом классе за указателем
- Сделать все поля Engine публичными
- Отметить новые поля как mutable
- Объявить методы Engine виртуальными
