smart_ptr : shared vs intrusive
depuis quelques temps, je me suis mis à utiliser les smart_ptr de boost (bien :lol:). jusqu'à présent, j'ai toujours utilisé les shared_ptr car c'était les seuls pour lequels j'avais trouvé des exemples d'utilisation. Et puis, dernierement, j'ai decouvert l'existence des intrusive_ptr (ou plutôt, j'ai enfin compris comment ils fonctionnaient :oops:).
Le truc, c'est qu'en lisant la doc, je suis tombé sur ca :
Citation:
As a general rule, if it isn't obvious whether intrusive_ptr better fits your needs than shared_ptr, try a shared_ptr-based design first.
mais pourquoi donc ?
certe, l'utilisation des intrusive_ptr obligent à avoir un ref count et des fonctions en plus, mais du coup, on a plus besoin d'heriter de enable_shared_from_this quand on veut passer un pointeur this à un autre objet.
Le plus gros problème que je voit à cette approche est l'augmentation de la taille de la classe, ce qui n'est pas forcement idéale dans le cas de petites classes (mais alors vraiment très petite :roll:), et d'ailleurs, cet aventage est perdu si je doit heriter de enable_shared_from_this...
bref, le sujet du jour est :
- les shared_ptr c'est naze ?
- les intrusive_ptr c'est le mal ?
les pour et les contres (car la, j'ai vraiment du mal a choisir, et je ne sait pas si il faut que je passe au intrusive_ptr dans mon projet actuel, sachant que j'ai de plus en plus de classes qui heritent de enable_shared_from_this et que ca commence a franchement me fatiguer :aie:, en bref, pour moi, le choix n'est vraiment pas obvious pour reprendre le terme de la doc de boost :?)