Зачем вам конструкторы? Большинство программистов, с которыми я работаю, включая меня, отказываются использовать библиотеки с глобальными конструкторами, потому что слишком часто они вносят ошибки, путая исходное состояние программы при вводе main
. Один конкретный пример, который я могу вспомнить, это OpenAL
, который ломал программы, когда он был просто связан, даже если он никогда не вызывался. Я не был тем в проекте, который имел дело с этой ошибкой, но если я не ошибаюсь, это как-то связано со взломом ALSA и прекращением использования ALSA основной программой позже.
Если ваша библиотека имеет нетривиальное глобальное состояние, вместо этого посмотрите, можете ли вы просто использовать глобальные структуры и инициализаторы. Возможно, вам придется добавить флаги с некоторыми указателями, чтобы указать, указывают ли они на выделенную память или статическую память. Другой метод - отложить инициализацию до первого вызова, но это может вызвать проблемы с безопасностью потока, если вы не используете pthread_once
или аналогичный.