Je me demandais avec mon collègue aujourd'hui que std::vector peut être mis en œuvre pour rendre l'utilisation de la mémoire tampon de petite optimisation. En regardant dans le C++11 projet, j'ai lu au 23.3.1p8
L'expression d'un.swap(b), pour les récipients a et b d'un conteneur standard de type autre que la matrice de, échange les valeurs de a et b sans avoir à tout déplacer, copier, ou des opérations de swap sur le conteneur éléments.
Qui au premier abord semble à proscrire petit tampon de l'optimisation, mais dans le cas de la règle, nous serions autorisés à faire encore petit tampon de l'optimisation pour les non-types de classe (puisque nous ne pouvons pas observer la copie en cours). Le texte suivant apparaît plus difficile à "tromper"
Chaque itérateur se référant à un élément dans un conteneur avant le swap doit se référer à la même élément dans l'autre récipient après l'échange.
Est-ce suffisant pour empêcher la mise en œuvre de la mémoire tampon de petite optimisation pour les std::vector? Existe-il d'autres barrages ou est-il éventuellement possible d'avoir un std::vector avec SBO?