Tenga cuidado con estas dos personas,
nuevos amigos y viejos enemigos : Kabir
¿Qué es una palabra clave estática en C++?
La palabra clave estática se puede aplicar a variables locales, funciones, miembros de datos de clase y objetos en C++. La variable local estática conserva sus valores entre la llamada a la función y se inicializa solo una vez. La función estática se puede llamar directamente usando el operador de resolución de alcance precedido por el nombre de la clase (consulte this , this y this para obtener más detalles). C++ también admite objetos estáticos.
¿Qué son los objetos estáticos en C++?
Un objeto se vuelve estático cuando se usa la palabra clave estática en su declaración. Consulte las dos declaraciones siguientes, por ejemplo, en C++.
Test t; // Stack based object static Test t1; // Static object
La primera declaración cuando se ejecuta crea un objeto en la pila significa que el almacenamiento se asigna en la pila. Los objetos basados en pilas también se denominan objetos automáticos u objetos locales. Los objetos estáticos se inicializan solo una vez y viven hasta que finaliza el programa. El objeto local se crea cada vez que se encuentra su declaración en la ejecución del programa.
a los objetos estáticos se les asigna almacenamiento en el área de almacenamiento estático. el objeto estático se destruye al finalizar el programa. C++ admite tanto el objeto estático local como el objeto estático global . El
siguiente es un ejemplo que muestra el uso del objeto estático local.
#include <iostream> class Test { public: Test() { std::cout << "Constructor is executed\n"; } ~Test() { std::cout << "Destructor is executed\n"; } }; void myfunc() { static Test obj; } // Object obj is still not destroyed because it is static int main() { std::cout << "main() starts\n"; myfunc(); // Destructor will not be called here std::cout << "main() terminates\n"; return 0; }
Producción:
main() starts Constructor is executed main() terminates Destructor is executed
Si observamos de cerca la salida de este programa, podemos ver que el destructor para el objeto local llamado obj no se llama después de que se ejecuta su constructor porque el objeto local es estático, por lo que tiene alcance hasta la vida útil del programa, por lo que su destructor será llamado cuando main() termina.
¿Qué sucede cuando eliminamos la estática en el programa anterior?
Como experimento, si eliminamos la palabra clave estática de la función global myfunc(), obtenemos el siguiente resultado:
main() starts Constructor is called Destructor is called main() terminates
Esto se debe a que el objeto ahora es un objeto basado en la pila y se destruye cuando sale del alcance y se llamará a su destructor.
¿Qué hay de los objetos estáticos globales?
El siguiente programa demuestra el uso del objeto estático global.
#include <iostream> class Test { public: int a; Test() { a = 10; std::cout << "Constructor is executed\n"; } ~Test() { std::cout << "Destructor is executed\n"; } }; static Test obj; int main() { std::cout << "main() starts\n"; std::cout << obj.a; std::cout << "\nmain() terminates\n"; return 0; }
Producción:
Constructor is executed main() starts 10 main() terminates Destructor is executed
Este artículo es una contribución de Meet Pravasi . Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA