Ho sentito dire che lanciare eccezioni in/da una libreria C++ potrebbe essere potenzialmente pericoloso, in particolare con le DLL, e in particolare se il codice chiamante e la libreria sono compilati con compilatori diversi. C'è qualche verità in questo? È sicuro finché rimango nelle librerie statiche? Nota che non sto parlando solo dell'uso interno delle eccezioni nella libreria, ma voglio inserirli anche nel codice chiamante :)Non è sicuro generare eccezioni da librerie C++ collegate in modo statico?
Giusto per chiarire: Dire che ho una libreria statica compilata che definisce la classe Foo come questo:
class Foo
{
public:
// Constructor
Foo()
{
/* ... Do stuff ... */
if (stuffwentwrong)
throw(123); // We throw an integer error code (to make it simple)
}
};
E qualche ragazzo usa in questo modo:
try
{
Foo foo_object;
}
catch (int i)
{
std::cout << "Oh bum. Code: " << i;
}
Vorrei che sia sicuro?
Ci sono stati problemi (circa 15 anni fa) questi sono stati risolti (a meno che non si sta facendo le cose funky come il caricamento dinamico/scarico DLL tutto da solo). Se stai semplicemente usando una DLL, dovresti stare bene. –