nuevo vs operador nuevo en C++

Cuando crea un nuevo objeto, la memoria se asigna utilizando la nueva función del operador y luego se invoca al constructor para inicializar la memoria. Aquí, el operador new realiza tanto la asignación como la inicialización, mientras que el operador new solo realiza la asignación.
Veamos cómo funcionan ambos individualmente.

nueva palabra clave

El nuevo operador es un operador que denota una solicitud de asignación de memoria en el Heap. Si hay suficiente memoria disponible, el operador nuevo inicializa la memoria y devuelve la dirección de la memoria recién asignada e inicializada a la variable de puntero. Cuando crea un objeto de clase usando una palabra clave nueva (normal nuevo).

  • La memoria para el objeto se asigna mediante el operador new from heap.
  • Se invoca al constructor de la clase para inicializar correctamente esta memoria.
// CPP program to illustrate 
// use of new keyword
#include<iostream>
using namespace std;
class car
{
    string name;
    int num;
  
    public:
        car(string a, int n)
        {
            cout << "Constructor called" << endl;
            this ->name = a;
            this ->num = n;
        }
  
        void enter()
        {
            cin>>name;
            cin>>num;
        }
  
        void display()
        {
            cout << "Name: " << name << endl;
            cout << "Num: " << num << endl;
        }
};
  
int main()
{
    // Using new keyword
    car *p = new car("Honda", 2017);
    p->display();
}

Producción:

Constructor called
Name: Honda
Num: 2017

Operador nuevo

El operador new es una función que asigna memoria sin procesar y, conceptualmente, es un poco similar a malloc() .

  • Es el mecanismo de anular la lógica de asignación de almacenamiento dinámico predeterminada.
  • No inicializa la memoria, es decir, no se llama al constructor. Sin embargo, después de nuestros nuevos retornos sobrecargados, el compilador llama automáticamente al constructor también según corresponda.
  • También es posible sobrecargar el operador new ya sea globalmente o para una clase específica
// CPP program to illustrate 
// use of operator new
#include<iostream>
#include<stdlib.h>
  
using namespace std;
  
class car
{
    string name;
    int num;
  
    public:
  
        car(string a, int n)
        {
            cout << "Constructor called" << endl;
            this->name = a;
            this->num = n;
        }
  
        void display()
        { 
            cout << "Name: " << name << endl;
            cout << "Num: " << num << endl;
        }
  
        void *operator new(size_t size)
        {
            cout << "new operator overloaded" << endl;
            void *p = malloc(size);
            return p;
        }
  
        void operator delete(void *ptr)
        {
            cout << "delete operator overloaded" << endl;
            free(ptr);
        }
};
  
int main()
{
    car *p = new car("HYUNDAI", 2012);
    p->display();
    delete p;
}

Producción:

new operator overloaded
Constructor called
Name:HYUNDAI
Num:2012
delete operator overloaded

Operador nuevo vs operador nuevo

  1. Operador frente a función: new es un operador y una palabra clave, mientras que operator new es solo una función.
  2. Nuevas llamadas “Operador nuevo”: “nuevo operador” llama “operador nuevo()”, como la forma en que + operador llama a operador +()
  3. El “Operador nuevo” se puede sobrecargar: El operador nuevo se puede sobrecargar al igual que las funciones que nos permiten realizar tareas personalizadas.
  4. Asignación de memoria: ‘nueva expresión’ llama al ‘operador nuevo’ para asignar memoria sin procesar, luego llama al constructor.

Este artículo es una contribución de Yash Singla . Si le gusta GeeksforGeeks y le gustaría contribuir, también puede escribir un artículo usando contribuya.geeksforgeeks.org o envíe su artículo por correo a contribuya@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.

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 *