On vous a dit que smart pointer étaient thread safe, vous l’avez cru.
Les petits caractères que vous n’avez peut-être pas bien lus
– pour un pointeur : « type * A = B; » est atomique dans la majorité des architectures processeurs raisonnables. Thread 2 lira la valeur de A avant ou après, mais jamais une valeur intermédiaire.
– pour un smart pointer : « smart_pointer A = B » n’est jamais atomique => vous êtes mort si A est visible pour plusieurs thread, *y* *compris* si 1 seul écrit dedans et que tous les autres se contentent de « lire ».

Donc :
– Si vous voulez partager un vector> entre plusieurs thread, vous ne pourrez plus jamais modifier la liste d’éléments de votre vecteur.

– Si vous avez un smart_pointer, et que votre architecture garantit « type * A = B; » atomique, et que vous êtes suffisamment prudent quand vous modifiez un élément du tableau de pointeur (swap, unique_ptr seront certainement utiles), vous pouvez vous en sortir.

NB : Vous devrez définir l’objet avec une surcharge du destructeur pour que le tableau soit libéré comme il faut :
smart_pointer()>