Operador de seleccion -> en variable no puntero..

Iniciado por digimikeh, 13 Mayo 2019, 04:33 AM

0 Miembros y 1 Visitante están viendo este tema.

digimikeh

Hola

Me he topado con algo que no había visto antes.. es lo siguiente;

Código (cpp) [Seleccionar]

auto director = Director::getInstance();
auto glview = director->getOpenGLView();


director no es puntero, porque entonces utiliza el operador -> ?

Gracias
Saludos
Dungeons & dragons;
dragons.Attack();

digimikeh

Corrijanne si estoy mal por favor, me parece que la palabra auto lo que hace es autodetectar el tipo devuelto, en este caso Director::getIntance() esta devolviendo un puntero de algún tipo... Y auto se transforma en ese puntero devuelto..

Sera asi?
Dungeons & dragons;
dragons.Attack();

K-YreX

Por qué dices que no es un puntero? Normalmente la función miembro <getInstance()> suele ser una función de las clases singleton (clases que solo pueden tener una instancia) y estas clases suelen tener un puntero a un objeto de esa clase.
Código (cpp) [Seleccionar]

class SingletonExample{
    private:
        static SingletonExample* instance = NULL;
        SingletonExample(){}
    public:
        static SingletonExample getInstance(){
            if (instance == NULL)
                instance = new SingletonExample;
            return *instance;
        }
}

Te dejo el enlace de donde he sacado este fragmento de código: https://stackoverflow.com/questions/12707542/what-exactly-does-getinstance-do-in-a-singleton


Y como bien acabas de decir. La palabra reservada <auto> crea la variable del mismo tipo que le estás asignando.
Código (cpp) [Seleccionar]

cout << "Todos tenemos un defecto, un error en nuestro código" << endl;

digimikeh

Decía que no era puntero porque no lleva el asterisco

Tiene algo que ver la palabra auto?
Dungeons & dragons;
dragons.Attack();

K-YreX

Al usar la palabra <auto> todo depende del valor de retorno de <getInstance()>. Si esa función devuelve un puntero o una referencia entonces <auto> se comportará como si estuviesemos declarando un puntero de ese tipo.
Código (cpp) [Seleccionar]

cout << "Todos tenemos un defecto, un error en nuestro código" << endl;

digimikeh

Si, justamente así lo entendí luego.. Y lo acabas de confirmar.

Y gracias por el dato del patrón singleton, debo echarle una mirada..
Saludos
Dungeons & dragons;
dragons.Attack();

@XSStringManolo

#6
El operador flecha es lo mismo que el operador desreferenciador y el operador punto.
director->getOpenGLView()
(*director).getOpenGLView()

Se utiliza la flecha para escribir menos y hacer el codigo más fácil de leer. Pero son lo mismo.
Recuerda tambien que los operadores se pueden sobrecargar para que hagan cosas distintas.
Como ya te han dicho, auto detecta el tipo de dato.

digimikeh

Si, lo tenia claro, mi duda estaba con el tipo auto..

Gracias.. saludos!
Dungeons & dragons;
dragons.Attack();