C++ | Sobrecarga del operador | Pregunta 10

¿Predecir la salida?

#include<stdlib.h>
#include<stdio.h>
#include<iostream>
  
using namespace std;
  
class Test {
    int x;
public:
    void* operator new(size_t size);
    void operator delete(void*);
    Test(int i) {
        x = i;
        cout << "Constructor called \n";
    }
    ~Test() { cout << "Destructor called \n"; }
};
  
  
void* Test::operator new(size_t size)
{
    void *storage = malloc(size);
    cout << "new called \n";
    return storage;
}
  
void Test::operator delete(void *p )
{
    cout<<"delete called \n";
    free(p);
}
  
int main()
{
    Test *m = new Test(5);
    delete m;
    return 0;
}

(A)

new called
Constructor called
delete called
Destructor called

(B)

new called
Constructor called
Destructor called
delete called

(C)

Constructor called
new called
Destructor called
delete called

(D)

Constructor called
new called
delete called
Destructor called

Respuesta: (B)
Explicación: Considere la siguiente declaración

    Test *ptr = new Test;  

En realidad, hay dos cosas que suceden en la declaración anterior: asignación de memoria y construcción de objetos; la nueva palabra clave es responsable de ambos. Un paso en el proceso es llamar al operador nuevo para asignar memoria; el otro paso es invocar realmente al constructor. El operador new solo nos permite cambiar el método de asignación de memoria, pero no hace nada con el método de llamada del constructor. La palabra clave new es responsable de llamar al constructor, no al operador new .

Cuestionario de esta pregunta

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 *