Uma das minhas principais reclamações sobre C ++ é a dificuldade na prática de passar objetos de biblioteca std fora dos limites da biblioteca dinâmica (por exemplo, dll / so).
A biblioteca std geralmente é apenas de cabeçalho. O que é ótimo para fazer algumas otimizações incríveis. No entanto, para as DLLs, elas geralmente são criadas com configurações diferentes do compilador que podem impactar a estrutura / código interno dos contêineres de uma biblioteca std. Por exemplo, no MSVC, uma dll pode criar com a depuração do iterador ativada, enquanto outra cria com a desativação. Essas duas DLLs podem ter problemas ao passar contêineres std. Se eu expor std::string
na minha interface, não posso garantir que o código que o cliente está usando std::string
seja uma correspondência exata da minha biblioteca std::string
.
Isso leva a problemas difíceis de depurar, dores de cabeça etc. Você controla rigidamente as configurações do compilador em sua organização para evitar esses problemas ou usa uma interface C mais simples que não terá esses problemas. Ou especifique para seus clientes as configurações esperadas do compilador que eles devem usar (o que é ruim se outra biblioteca especificar outras configurações do compilador).
Minha pergunta é se o C ++ 11 tentou ou não fazer alguma coisa para resolver esses problemas?
DLL
s. Entre SO
s sempre funcionou muito bem.