20 votos

¿Cuáles son los punteros void en C++?

Mi pregunta es simple: ¿cuáles son los punteros void en C++? (Esas cosas se declara con void* myptr;)

¿Cuál es su uso? Puedo hacer que apuntan a una variable de cualquier tipo?

20voto

Péter Török Puntos 72981

Básicamente, un remanente de C.

¿Cuál es su uso?

En C, que fueron y son utilizados ampliamente, pero en C++ creo que son muy raramente, si nunca, es necesario, ya que hemos polimorfismo, plantillas, etc. que proporcionan una forma mucho más limpia y más segura manera de resolver los mismos problemas que en C sería usar los punteros void.

Puedo hacer que apuntan a una variable de cualquier tipo?

Sí. Sin embargo, como otros han señalado, no se puede utilizar un puntero void directamente - usted tiene que convertir en un puntero a un concreto tipo de datos en primer lugar.

7voto

jwismar Puntos 6295

Sí, este es un C constructo (no C++) que permite declarar una variable puntero que apunta a cualquier tipo de. Realmente no se puede hacer nada con un puntero, excepto de fundición de nuevo al objeto real que realmente apunta. En C++ moderno, void* prácticamente se ha pasado de moda, produciendo en muchos casos basadas en plantillas de código genérico.

6voto

wheaties Puntos 20917

Acerca de uno de los pocos usos que existen para que los punteros void en C++, es su uso en la sobrecarga de la new operadores. Todos los new operadores de tipo de retorno void* , por definición. Aparte de eso, lo que otros han dicho es verdad.

4voto

Raul Agrait Puntos 3177

De cplusplus.com:

El vacío tipo de puntero es un especial tipo de puntero. En C++, nula representa la ausencia de tipo, por lo que los punteros void punteros que apuntan a un valor que no tiene ningún tipo (y por lo tanto también una longitud indeterminada y indeterminado de eliminar propiedades).

Esto permite que los punteros void a punto para cualquier tipo de datos, desde un valor entero o un flotador a una cadena de caracteres. Pero en cambio tienen una gran limitación: los datos apuntados por ellos no puede ser directamente se eliminan las referencias (que es lógico, ya que no tienen ningún tipo de eliminar la referencia a), y por esa razón hemos de tener siempre a emitir el dirección del puntero nulo para algunos otro tipo de puntero que apunta a un hormigón tipo de datos antes de eliminación de referencias.

4voto

Crazy Eddie Puntos 23778

Tipo de ocultar. Aún así tiene sus usos válidos en C++ moderno. Cavar a través del código fuente en el impulso y la puedes encontrar algunos. En general el uso de un void* está enterrado muy profundo dentro de las entrañas de una más compleja construcción que garantiza el tipo de seguridad de la interfaz, mientras que haciendo negra y el mal de la magia en su interior.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X