Prediga la salida de los siguientes programas C++.
Pregunta 1
#include <iostream> using namespace std; class A { public: A& operator=(const A&a) { cout << "A's assignment operator called" << endl; return *this; } }; class B { A a[2]; }; int main() { B b1, b2; b1 = b2; return 0; }
Producción:
A's assignment operator called A's assignment operator called
La clase B no tiene un operador de asignación definido por el usuario. Si no escribimos nuestro propio operador de asignación, el compilador crea un operador de asignación predeterminado. El operador de asignación predeterminado copia uno por uno todos los miembros del objeto del lado derecho al objeto del lado izquierdo. La clase B tiene 2 miembros de la clase A. Ambos se copian en la declaración «b1 = b2», por eso hay dos llamadas de operador de asignación.
Pregunta 2
#include<stdlib.h> #include<iostream> using namespace std; class Test { public: void* operator new(size_t size); void operator delete(void*); Test() { cout<<"\n Constructor called"; } ~Test() { cout<<"\n Destructor called"; } }; void* Test::operator new(size_t size) { cout<<"\n new called"; void *storage = malloc(size); return storage; } void Test::operator delete(void *p ) { cout<<"\n delete called"; free(p); } int main() { Test *m = new Test(); delete m; return 0; }
new called Constructor called Destructor called delete called
Veamos qué sucede cuando se ejecuta la siguiente declaración.
Test *x = new Test;
Cuando usamos una nueva palabra clave para asignar memoria dinámicamente, suceden dos cosas: asignación de memoria y llamada al constructor. La asignación de memoria ocurre con la ayuda del operador new. En el programa anterior, hay un operador nuevo definido por el usuario, por lo que primero se llama al operador nuevo definido por el usuario, luego se llama al constructor.
El proceso de destrucción es opuesto. Primero, se llama al destructor, luego se desasigna la memoria.
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