depuis quelques temps, je me suis mis à utiliser les smart_ptr de boost (bien). 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
).
Le truc, c'est qu'en lisant la doc, je suis tombé sur ca :
mais pourquoi donc ?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.
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), 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, en bref, pour moi, le choix n'est vraiment pas obvious pour reprendre le terme de la doc de boost
)
Partager