En fait tu n'as pas compris où le problème se situe. C'est lors de la restitution de la valeur extrait de la queue que l'exception peut être lancée. C'est un point où on ne peut rien faire, et où on va perdre en cohérence.
Le but du mécanisme d'exception est de permettre la récupération d'une erreur en revenant dans l'état dans lequel on était avant la fonction qui a émis l'exception. Or ici, la fonction aura changé l'état de la queue lorsque l'exception pourra être lancée. L'état de la queue ne sera donc pas cohérente, une donnée aura été perdue.
Si la queue contient des ressources qui doivent être désallouées après usage, on aura également une belle fuite de ressources (mémoire, mutex, etc). Il est vrai que ces ressources devraient être gérées en RIAA, bon, soit. Mais le problème reste entier, puisque la ressource sera libérée mais qu'elle n'aura pas été utilisée comme attendu. Ce qui peut être un bogue très difficile à détecter.
[^] # Re: Boost ? c'est quoi ?
Posté par LupusMic (site web personnel, Mastodon) . En réponse à la dépêche Sortie de Boost 1.46. Évalué à 3.
C'est clairement une erreur de design.
En fait tu n'as pas compris où le problème se situe. C'est lors de la restitution de la valeur extrait de la queue que l'exception peut être lancée. C'est un point où on ne peut rien faire, et où on va perdre en cohérence.
Le but du mécanisme d'exception est de permettre la récupération d'une erreur en revenant dans l'état dans lequel on était avant la fonction qui a émis l'exception. Or ici, la fonction aura changé l'état de la queue lorsque l'exception pourra être lancée. L'état de la queue ne sera donc pas cohérente, une donnée aura été perdue.
Si la queue contient des ressources qui doivent être désallouées après usage, on aura également une belle fuite de ressources (mémoire, mutex, etc). Il est vrai que ces ressources devraient être gérées en RIAA, bon, soit. Mais le problème reste entier, puisque la ressource sera libérée mais qu'elle n'aura pas été utilisée comme attendu. Ce qui peut être un bogue très difficile à détecter.