¿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 .
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