Как вы смотрите на глобальные объекты в .dll? Интересует вот что — где для вас находится граница, определяющая, объекты каких именно классов можно создавать в .dll со static storage duration в случае линковки с CRT? Вот недавно, например, узнал, что библиотека zeromq, необходимая мне для межпроцессного взаимодействия, к числу безопасных не относится — виснет на WaitForSingleObject. Теперь вообще задумываюсь над тем, чтобы убрать глобальные std::unique_ptr и std::string из .dll — мало ли что и когда там появится...
То, что глобальные объекты — это плохо в целом, я знаю. Интересует конкретная ситуация с .dll
Да, кто не в курсе — для глобальных объектов в .dll в случае линковки с CRT выдвигаются те же требования, что и к DllMain
http://msdn.microsoft.com/en-us/library/windows/desktop/ms682583%28v=vs.85%29.aspx
If your DLL is linked with the C run-time library (CRT), the entry point provided by the CRT calls the constructors and destructors for global and static C++ objects. Therefore, these restrictions for DllMain also apply to constructors and destructors and any code that is called from them.