c++ - usar - ¿Cómo conseguir que el objeto sea señalado por un puntero compartido?
punteros c++ con clase (2)
Tengo una consulta. ¿Podemos obtener el objeto al que apunta un puntero compartido directamente? ¿O deberíamos obtener el puntero RAW subyacente a través de la llamada get()
y luego acceder al objeto correspondiente?
Tiene dos opciones para recuperar una referencia al objeto al que apunta un shared_ptr
. Supongamos que tiene una variable ptr
llamada ptr
. Puede obtener la referencia usando *ptr
o *ptr.get()
. Estos dos deberían ser equivalentes, pero el primero sería el preferido.
La razón de esto es que realmente estás intentando imitar la operación de desreferencia de un puntero en bruto. La expresión *ptr
lee " *ptr
los datos señalados por ptr
", mientras que la expresión *ptr.get()
" *ptr.get()
los datos señalados por el puntero en bruto que está envuelto dentro de ptr
". Claramente, el primero describe tu intención mucho más claramente.
Otra razón es que shared_ptr::get()
está diseñado para usarse en un escenario en el que realmente necesita acceso al puntero en bruto. En su caso, no lo necesita, así que no lo solicite. Simplemente omita todo el puntero en bruto y continúe viviendo en su mundo shared_ptr
más shared_ptr
.
La respuesta de Ken arriba (o abajo, dependiendo de cómo se ordenen) es excelente. No tengo suficiente reputación para comentar, de lo contrario lo haría.
Solo me gustaría agregar que también puede usar el operador ->
directamente en shared_ptr
para acceder a los miembros del objeto al que apunta.
La documentación de impulso da una gran visión general.
EDITAR
Ahora que C ++ 11 es ampliamente adoptado, std::shared_ptr
debería ser preferido a la versión Boost. Vea los operadores de desreferenciación here .