J'ai une question. Pouvons-nous obtenir directement l'objet vers lequel pointe un pointeur partagé? Ou devrions-nous obtenir le pointeur RAW sous-jacent via l'appel get()
puis accéder à l'objet correspondant?
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 en utilisant *ptr
Ou *ptr.get()
. Ces deux devraient être équivalents, mais le premier serait préféré.
La raison en est que vous essayez vraiment d'imiter l'opération de déréférencement d'un pointeur brut. L'expression *ptr
Se lit "Obtenez-moi les données pointées par ptr
", tandis que l'expression *ptr.get()
"Obtenez-moi les données pointées par le pointeur brut qui est enveloppé à l'intérieur ptr
". De toute évidence, le premier 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 avez réellement besoin accès au pointeur brut. Dans votre cas, vous n'en avez pas besoin, alors ne le demandez pas. Ignorez simplement le pointeur brut et continuez à vivre dans votre monde shared_ptr
Plus sûr.
la réponse de Ken ci-dessus (ou ci-dessous, selon la façon dont ils sont triés) est génial. Je n'ai pas assez de réputation pour commenter, sinon je le ferais.
Je voudrais juste ajouter que vous pouvez également utiliser le ->
opérateur directement sur un shared_ptr
pour accéder aux membres de l'objet vers lequel il pointe.
Le booster la documentation donne un bon aperçu.
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 .