tratamento de exceção compilador cruzado - pode ser feito com segurança?
-
19-09-2019 - |
Pergunta
Estou fazendo alguma manutenção em um C ++ janelas biblioteca DLL que é necessário para trabalhar com diferentes compiladores VC ++ (como eu não quero abordar diferentes esquemas de nomenclatura ter sido).
Eu já eliminaram qualquer uso da STL na interface.
Eu tenho segurado que corrupção de pilha não vai ocorrer a partir da mistura de diferentes novos / exclusão de.
O item final é exceções. Posso lançar uma exceção e esperar que ele seja capturado corretamente por uma versão diferente do compilador?
Solução
Mesmo considerando o seu comentário adicional: Este irá falhar sempre que MS muda tanto ABI do compilador ou o layout de classe da classe de exceção (es) ou até mesmo com diferentes configurações do compilador . Na verdade, a última falha pode causar até mesmo com o mesma compilador.
Então eu acho que a resposta é: Não, você não pode fazer isso com segurança. Se você quer passar objetos não-POD entre executáveis, devem ser compiladas com o mesmo compilador, a mesma biblioteca std, eo mesmo (até certo ponto) configurações do compilador.
Outras dicas
Eu esperaria que ser até o fornecedor do compilador, eu não acho que especifica padrão como as exceções estão a ser implementado, por isso não pode lhe garantir uma implementação coerente.
Provavelmente não. Cada versão do compilador terá o seu próprio ambiente de tempo de execução que é completamente inconsciente do outro ambiente. A menos que o fornecedor declara explicitamente que isso é possível é mais provável não é possível.