L’un de mes principaux griefs à propos du C ++ est qu’il est difficile en pratique de faire passer des objets de bibliothèque std en dehors des limites de la bibliothèque dynamique (c'est-à-dire dll / so).
La bibliothèque std est souvent en-tête uniquement. Ce qui est génial pour faire des optimisations géniales. Cependant, pour les dll, elles sont souvent construites avec des paramètres de compilateur différents qui peuvent avoir un impact sur la structure / le code interne des conteneurs d'une bibliothèque std. Par exemple, dans MSVC, une dll peut être générée avec le débogage itérateur, alors qu'une autre est générée avec elle. Ces deux dll peuvent rencontrer des problèmes lors de la transmission de conteneurs std. Si j'expose std::string
dans mon interface, je ne peux pas garantir que le code utilisé par le client std::string
correspond exactement à celui de ma bibliothèque std::string
.
Cela conduit à des problèmes difficiles à résoudre, des maux de tête, etc. Vous pouvez soit contrôler de manière rigide les paramètres du compilateur dans votre organisation pour éviter ces problèmes, soit utiliser une interface C plus simple qui ne les aura pas. Ou spécifiez à vos clients les paramètres de compilateur attendus qu'ils doivent utiliser (ce qui est inutile si une autre bibliothèque spécifie d'autres paramètres de compilateur).
Ma question est de savoir si C ++ 11 a essayé de faire quelque chose pour résoudre ces problèmes?
DLL
s. Entre SO
les deux, ça a toujours bien fonctionné.