2011-10-05 23 views
5

Según tengo entendido, cada instancia de una clase tiene sus propias variables miembro en la memoria, de modo que puede almacenar diferentes valores para diferentes objetos. Sin embargo, no es lo mismo para las funciones de miembro. Las funciones miembro se reutilizan en los objetos de una clase, por lo que solo tiene una dirección con un bloque de memoria para referirse cuando sea necesario para todos los objetos.Diferencia entre el método estático y la función no estática en la memoria

La función estática está hecha para acceder a los miembros estáticos. Sin embargo, la función estática también existe solo una durante la vida de su aplicación. Además de ser el acceso estático, a bajo nivel no es diferente de las funciones normales de clase, ¿no es así? ¿O tal vez estoy equivocado, que cada clase tiene sus propias funciones?

Respuesta

2

Esto difiere de un idioma a otro, pero en C o C++ 03 las funciones generalmente se relacionan con las funciones de ensamblaje; es decir, existen una vez en la memoria (ya sean funciones gratuitas, funciones de clase o funciones estáticas de clase) y toman argumentos como parámetros, incluido un puntero this para funciones de miembro que está implícito.

En C++ 11, las funciones lambda introducen una novedad: cada instancia de la llamada función tendrá algún estado. Desde el punto de vista de la implementación, significa que debe crearse una función "normal" y está asociada a un conjunto anónimo de datos (si es necesario). La función no necesita ser duplicada cada vez que se crea el lambda, pero los datos sí lo hacen. Una figura útil es recordar que las lambdas (en C++) reemplazan a los objetos de función (u objetos predicados): son solo azúcar sintáctico, la implementación es similar.

6

Las funciones no estáticas aceptan el parámetro adicional, this, que es el puntero a la instancia de la clase con las variables específicas de la instancia.

Las funciones estáticas no tienen este parámetro (por lo tanto, no puede usar this en una función estática y solo puede acceder a los miembros de datos estáticos).

0

La única diferencia entre las funciones estáticas y de miembro es que las funciones de miembro siempre tienen el puntero this pasado automáticamente.

0

simplemente si se hace referencia, las funciones estáticas crean un único conjunto de memoria para sí mismas y están destinadas para datos estáticos, miembros que generalmente no son modificables. Pero las funciones no estáticas crean un conjunto separado de memorias para cada instancia y están pensadas para miembros de datos no estáticos y estáticos. Si necesita una salida estable, vaya por estática y si necesita la alternativa, busque la no estática.

Cuestiones relacionadas