2012-02-29 23 views
5

estoy trabajando en alguien más en el trabajo de código (aplicación de escritorio Qt) y encontré esto:¿Dirección del puntero desreferenciado?

connect(&*mpMainWin, SIGNAL(whatever()), this, SLOT(whatever()))); 

tengo algunas dificultades para entender la parte &*mpMainWin. Por lo que sé sobre punteros, devuelve la dirección del puntero desreferenciado mpMainWin.

Pero mpMainWin ya tienen esa dirección, por lo que asignarla directamente como parámetro debería tener el mismo resultado.

Así que si no me falta algo y mi lógica es correcta, ¿cuál es el motivo de hacer tal cosa? y si hay uno, ¿cuándo deberíamos usar ese tipo de sintaxis?

+5

¿El tipo de 'mpMainWin' tiene un operador de referencia con sobrecarga? –

+0

No, no encuentro ninguna sobrecarga en su encabezado. – talnicolas

+1

¿Qué tal para su (s) superclase (s)? ¿Trataste de sacar el 'y *' para ver qué pasa? –

Respuesta

9

Esto se puede utilizar como un truco para convertir un puntero inteligente (es decir, no realmente un puntero, una clase que implementa operator*()) en un puntero simple. Sin ver cómo se declara mpMainWin es imposible decir si ese es el caso aquí. Si mpMainWin es un puntero simple, entonces sí, &*mpMainWin es lo mismo que mpMainWin.

+0

En realidad es un puntero inteligente. Buena esa... – talnicolas

Cuestiones relacionadas