• [^] # Re: Boost ? c'est quoi ?

    Posté par (site web personnel) . En réponse à la dépêche Sortie de Boost 1.46. Évalué à -1.

    Prototype : T QQueue::dequeue()

    Au moment de dequeue() 2 étapes sont effectuées :

    1. copie de T pour pouvoir le retourner
    2. suppression de T de la queue

    Lors de l'étape 1 il y a un appel à l'operateur = de T (T::operator=())

    Si l'operateur = lance une exception alors la copie ne se fait pas et T retourné par dequeue() est foireux.

    Effectivement std::queue ne fonctionne pas ainsi et pop() (l'equivalent de dequeue()) ne retourne rien cf http://www.sgi.com/tech/stl/queue.html#3 ou les concepteurs de la STL expliquent les raisons.

    Es dramatique ?

    • Une exception a eu lieu, ta valeur est donc non garantie, je trouve rien de choquant a ca, c'est meme plutôt commun.

    • Tu peux toujours utiliser QQueue de la meme façon que std::queue.

    • AHMA les concepteurs de la STL ne détiennent pas LA vérité. Par exemple en C# Queue.Dequeue fonctionne de la meme façon que QQueue, pareil en Java.

    Parler d'"erreurs de design" est clairement exagéré.