Comment retourner des pointeurs intelligents (shared_ptr), par référence ou par valeur?

Disons que j'ai une classe avec une méthode qui retourne un shared_ptr.

Quels sont les avantages et les inconvénients de nous le retourner par référence ou par valeur?

Deux indices possibles:

  • Début de destruction des objets. Si je retourne la shared_ptr par (const) de référence, le compteur de référence n'est pas incrémenté, j'ai donc encourir le risque d'avoir l'objet supprimé quand elle est hors de portée dans un autre contexte (par exemple, un autre thread). Est-ce correct? Que faire si l'environnement est monothread, cette situation peut se produire aussi bien?
  • Coût. Passage par valeur est certainement pas gratuit. Est-ce la peine de l'éviter chaque fois que possible?

Merci tout le monde.

InformationsquelleAutor Vincenzo Pii | 2012-05-17