El lenguaje de programación C++ permite objetos asignados automáticamente (o asignados por pila) y dinámicamente. En Java y C#, todos los objetos deben asignarse dinámicamente utilizando new.
C++ admite objetos asignados a la pila por razones de eficiencia del tiempo de ejecución. Los objetos basados en pilas son administrados implícitamente por el compilador de C++. Se destruyen cuando quedan fuera del alcance y los objetos asignados dinámicamente deben liberarse manualmente, utilizando el operador de eliminación; de lo contrario, se produce una pérdida de memoria. C++ no es compatible con el enfoque de recolección automática de elementos no utilizados que utilizan lenguajes como Java y C#.
¿Cómo logramos el siguiente comportamiento de una clase ‘Prueba’ en C++?
Test* t = new Test; // should produce compile time error Test t; // OK
La idea es mantener privada la función del operador new para que no se pueda llamar a new. Ver el siguiente programa. Los objetos de la clase ‘Prueba’ no se pueden crear usando new ya que la función de operador new es privada en ‘Test’. Si quitamos el comentario de la segunda línea de main(), el programa produciría un error de tiempo de compilación.
CPP
// CPP Program to restrict dynamic // allocation of objects in C++ #include <iostream> using namespace std; // Objects of Test can not be // dynamically allocated class Test { // new operator function is private void* operator new(size_t size); int x; public: Test() { x = 9; cout << "Constructor is called\n"; } void display() { cout << "x = " << x << "\n"; } ~Test() { cout << "Destructor is executed\n"; } }; // Driver Code int main() { // Test* obj=new Test(); -> Uncommenting this line would // cause a compile time error. Test t; // Ok, object is allocated at compile time t.display(); // object goes out of scope, destructor will be called return 0; }
Constructor is called x = 9 Destructor is executed
Además, es una consulta general si podemos asignar memoria para los objetos dinámicamente en C++.
Sí, también podemos asignar objetos dinámicamente.
- Cada vez que se crea un nuevo objeto, constructor, se llama a una función miembro de una clase.
- Cada vez que el objeto sale del alcance, destructor, se llama a una función miembro de la clase.
Complejidad temporal : O(1)
Espacio auxiliar : O(1)
Este artículo es una contribución de Pravasi Meet . 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