Pour conclure, je veux bien un cas d'usage quotidien de shared_ptr. Si je peux être détrompé, tant mieux.
Quelques cas. Un premier, c’est de transférer la propriété sur un objet non movable (c’est à dire, en remplacement de std::unique_ptr, pour des objets pas prévus pour / du code legacy). Je t’accorde que je triche, mais il ne faut pas oublier que shared_ptr est antérieur à unique_ptr, et que pour cet usage il était très largement supérieur à auto_ptr.
Un deuxième, c’est typiquement quand tu veux passer un observateur optionnel à un objet qui fait un traitement. Dans ce cas, ça peut être le couple weak_ptr / shared_ptr qui peut être utile (si tu souhaites que ce soit l’appelant qui gère la durée de vie de l’objet, mais qu’il puisse supprimer l’observateur en cours de traitement).
Sinon, c’est je par exemple aussi beaucoup utilisé dans les frameworks de futures (parce que dans ce type de frameworks, la responsabilité de la durée de vie des callbacks est clairement partagée).
Bref, comme beaucoup de choses en C++ : ce n’est pas le truc à tout faire, mais il y a des cas d’utilisation pour lesquels c’est l’outil le plus adapté.
Mes commentaires sont en wtfpl. Une licence sur les commentaires, sérieux ? o_0
[^] # Re: Donc pour résumer...
Posté par whity . En réponse à la dépêche C++17, Genèse d’une version mineure. Évalué à 1.
Quelques cas. Un premier, c’est de transférer la propriété sur un objet non movable (c’est à dire, en remplacement de std::unique_ptr, pour des objets pas prévus pour / du code legacy). Je t’accorde que je triche, mais il ne faut pas oublier que shared_ptr est antérieur à unique_ptr, et que pour cet usage il était très largement supérieur à auto_ptr.
Un deuxième, c’est typiquement quand tu veux passer un observateur optionnel à un objet qui fait un traitement. Dans ce cas, ça peut être le couple weak_ptr / shared_ptr qui peut être utile (si tu souhaites que ce soit l’appelant qui gère la durée de vie de l’objet, mais qu’il puisse supprimer l’observateur en cours de traitement).
Sinon, c’est je par exemple aussi beaucoup utilisé dans les frameworks de futures (parce que dans ce type de frameworks, la responsabilité de la durée de vie des callbacks est clairement partagée).
Bref, comme beaucoup de choses en C++ : ce n’est pas le truc à tout faire, mais il y a des cas d’utilisation pour lesquels c’est l’outil le plus adapté.
Mes commentaires sont en wtfpl. Une licence sur les commentaires, sérieux ? o_0