Salida del programa C++ | Conjunto 17

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *