Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: digimikeh en 13 Mayo 2019, 04:33 am



Título: Operador de seleccion -> en variable no puntero..
Publicado por: digimikeh en 13 Mayo 2019, 04:33 am
Hola

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

Código
  1. auto director = Director::getInstance();
  2. auto glview = director->getOpenGLView();
  3.  

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

Gracias
Saludos


Título: Re: Operador de seleccion -> en variable no puntero..
Publicado por: digimikeh en 13 Mayo 2019, 04:50 am
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?


Título: Re: Operador de seleccion -> en variable no puntero..
Publicado por: K-YreX en 13 Mayo 2019, 04:57 am
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
  1. class SingletonExample{
  2.    private:
  3.        static SingletonExample* instance = NULL;
  4.        SingletonExample(){}
  5.    public:
  6.        static SingletonExample getInstance(){
  7.            if (instance == NULL)
  8.                instance = new SingletonExample;
  9.            return *instance;
  10.        }
  11. }
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.


Título: Re: Operador de seleccion -> en variable no puntero..
Publicado por: digimikeh en 13 Mayo 2019, 05:27 am
Decía que no era puntero porque no lleva el asterisco

Tiene algo que ver la palabra auto?


Título: Re: Operador de seleccion -> en variable no puntero..
Publicado por: K-YreX en 13 Mayo 2019, 06:37 am
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.


Título: Re: Operador de seleccion -> en variable no puntero..
Publicado por: digimikeh en 13 Mayo 2019, 15:37 pm
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


Título: Re: Operador de seleccion -> en variable no puntero..
Publicado por: @XSStringManolo en 13 Mayo 2019, 17:03 pm
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.


Título: Re: Operador de seleccion -> en variable no puntero..
Publicado por: digimikeh en 13 Mayo 2019, 21:09 pm
Si, lo tenia claro, mi duda estaba con el tipo auto..

Gracias.. saludos!