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?
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
.
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 .