J'ai une question. Peut-on obtenir directement l'objet sur lequel pointe un pointeur partagé ? Ou doit-on obtenir le pointeur RAW sous-jacent par l'intermédiaire de get()
et ensuite accéder à l'objet correspondant ?
Réponses
Trop de publicités?Vous disposez de deux options pour récupérer une référence à l'objet pointé par un fichier shared_ptr
. Supposons que vous ayez un shared_ptr
variable nommée ptr
. Vous pouvez obtenir la référence soit en utilisant *ptr
o *ptr.get()
. Les 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
lit "Obtenez-moi les données pointées par ptr
", alors que l'expression *ptr.get()
"Obtenez-moi les données pointées par le pointeur brut qui est enveloppé à l'intérieur de ptr
". Il est clair que la première décrit beaucoup mieux votre intention.
Une autre raison est que shared_ptr::get()
est destiné à être utilisé dans un scénario où vous avez effectivement besoin de l'accès au pointeur brut. Dans votre cas, vous n'en avez pas besoin, donc ne le demandez pas. Laissez tomber le pointeur brut et continuez à vivre dans votre coffre-fort. shared_ptr
monde.
Réponse de Ken ci-dessus (ou en dessous, selon la façon dont ils sont classés) est formidable. Je n'ai pas assez de réputation pour commenter, sinon je le ferais.
J'aimerais juste ajouter que vous pouvez également utiliser la fonction ->
directement sur un shared_ptr
pour accéder aux membres de l'objet vers lequel il pointe.
El documentation sur le boost donne un excellent aperçu.
EDITAR
Maintenant que C++11 est largement adopté, std::shared_ptr
doit être préférée à la version Boost. Voir les opérateurs de déréférencement aquí .