J'écris une bibliothèque C++ qui utilise une bibliothèque C externe tierce. Ainsi, ma bibliothèque appellera des fonctions dans cette bibliothèque tierce et la bibliothèque tierce rappellera dans une partie différente de ma bibliothèque. Je me demande ce qu'il advient des exceptions dans ce cas-ci? Dites MyLib :: foo() appelle la fonction de bibliothèque C externe qui appelle finalement MyLib :: bar(), et la barre lance une exception, que se passe-t-il? L'exception sera-t-elle correctement propagée à un gestionnaire dans foo()?propagation d'exception dans les bibliothèques C externes liées
Merci!
C'est mieux que ma réponse. Je n'ai pas vu que la bibliothèque tierce était C plutôt que C++. Même si le questionneur mentionne cela plusieurs fois. L'heure du coucher, peut-être. –
Ceci est la bonne réponse. Alors que certaines implémentations (GNU) se mettent en quatre pour essayer de permettre aux exceptions de se propager à travers le code C, c'est une très mauvaise idée de s'en servir. Non seulement il n'est pas portable, mais il n'y a aucune raison de supposer que le code C entre les deux n'aura pas d'état incohérent ou qu'il contiendra des allocations de mémoire qui n'ont pas encore été enregistrées en externe ou libérées. Au mieux, vous demandez des fuites de mémoire et, au pire, des plantages aléatoires. J'aime la suggestion de sbi sur la façon de contourner le problème, mais il vaut probablement mieux éviter de jeter des exceptions à travers les limites du module. –
@Tommy: J'ai écrit une longue explication pourquoi laisser des exceptions se propager via un C lib est mauvais comme un commentaire à votre réponse et est devenu grincheux quand vous l'aviez déjà supprimé quand je voulais commettre le commentaire. Alors merci pour votre gentil commentaire, qui a compensé cela. ':)' – sbi