He oído que lanzar excepciones en/desde una biblioteca C++ podría ser potencialmente peligroso, particularmente con DLL, y particularmente si el código de llamada y la biblioteca están compilados con diferentes compiladores. ¿Hay algo de cierto en esto? ¿Es seguro siempre que me adhiera a las bibliotecas estáticas? Tenga en cuenta que no estoy hablando del uso interno de excepciones en la biblioteca solamente, también quiero profundizar en el código de llamada :)¿No es seguro lanzar excepciones desde librerías C++ enlazadas estáticamente?
Solo para aclarar: Digamos que obtuve una biblioteca estática compilada que define la clase Foo como esto:
class Foo
{
public:
// Constructor
Foo()
{
/* ... Do stuff ... */
if (stuffwentwrong)
throw(123); // We throw an integer error code (to make it simple)
}
};
y un tipo lo utiliza como esto:
try
{
Foo foo_object;
}
catch (int i)
{
std::cout << "Oh bum. Code: " << i;
}
sería eso seguro?
Hubo problemas (hace unos 15 años), estos han sido resueltos (a menos que usted está haciendo las cosas cobardes como cargar dinámicamente/descarga DLL por sí mismo). Si simplemente usa directamente una DLL, entonces debería estar bien. –