Comment obtenir L'objet pointé par un pointeur partagé?

j'ai une question. Peut-on obtenir l'objet vers lequel un pointeur partagé pointe directement? Ou devrions-nous obtenir le pointeur brut sous-jacent par l'appel get() et ensuite accéder à l'objet correspondant?

21
demandé sur ashes999 2011-06-27 15:12:02

2 réponses

Vous avez deux options pour récupérer une référence à l'objet pointé par un shared_ptr . Supposons que vous ayez une variable shared_ptr nommée ptr . Vous pouvez obtenir la référence soit en utilisant *ptr ou *ptr.get() . Ces deux devraient être équivalent, mais la première serait préférable.

la raison en est que vous essayez vraiment d'imiter l'opération de déréférence d'un pointeur brut. L'expression *ptr lit "m'Obtenir les données pointé par ptr ", alors que l'expression *ptr.get() "donnez-moi les données pointé par le pointeur brut qui est enveloppé à l'intérieur de ptr ". Clairement, la première décrit votre intention beaucoup plus clairement.

une autre raison est que shared_ptr::get() est destiné à être utilisé dans un scénario où vous réellement besoin accès au pointeur brut. Dans votre cas, vous n'en avez pas besoin, donc, ne le demandez pas. Laisse tomber le truc du pointeur brut et continuez à vivre dans votre monde Sécuritaire shared_ptr .

42
répondu Ken Wayne VanderLinde 2015-11-19 19:56:43

la réponse de Ken au-dessus de (ou au-dessous, selon la façon dont ils sont triés) est grande. Je n'ai pas assez de réputation pour commenter, sinon je le ferais.

je voudrais juste ajouter que vous pouvez également utiliser l'opérateur -> directement sur un shared_ptr pour accéder aux membres de l'objet qu'il pointe.

Le coup de pouce "documentation 151950920" donne une excellente vue d'ensemble.

EDIT

maintenant que C++11 est largement adopté, std::shared_ptr devrait être préféré à la version Boost. Voir les opérateurs de déréférencement ici .

14
répondu jakar 2017-05-23 10:31:22