nueva función de operador

Cuando una instrucción como la siguiente se encuentra en un programa, convierte a una llamada a la función operator new:

Comentarios

char *pch = new char[BUFFER_SIZE];

Si la solicitud es para los bytes cero de almacenamiento, operador nuevo devuelve un puntero a un objeto distinto (es decir, llamadas repetidas punteros return de operador nuevo diferentes).Si hay memoria suficiente para la solicitud de asignación, operador nuevo devuelve NULL o produce una excepción (vea Los operadores new y delete para obtener más información).

Puede escribir una rutina que intente liberar memoria y vuelva a intentar la asignación; vea _set_new_handler para obtener más información.Para obtener más detalles sobre el esquema de recuperación, vea el tema siguiente, Controlar las condiciones de memoria insuficiente.

los dos ámbitos para las funciones de operator new se describen en la tabla siguiente.

Ámbito para las nuevas funciones de operador

Operador

Ámbito

:: operador nuevo

Global

nombre de clase:: operador nuevo

Clase

El primer argumento de operador nuevo debe ser de size_t tipo (un tipo definido en STDDEF.H), y el tipo de valor devuelto es siempre void *.

Se llama a la función global de operador nuevo cuando el operador de nuevo para asignar objetos de tipos integrados, los objetos de tipo de clase que no contienen funciones definidas por el usuario de operador nuevo , y las matrices de cualquier tipo.Cuando el operador de nuevo para asignar objetos de un tipo de clase donde se define operador nuevo , se llama a operador nuevo de esa clase.

Una función de operador nuevo definido para una clase es una función miembro estática (que no puede, por consiguiente, ser virtual) que oculta la función global de operador nuevo para los objetos de ese tipo de clase.Considere el caso en que nuevo se utiliza para asignar y para establecer la memoria a un valor determinado:

// spec1_the_operator_new_function1.cpp
#include <malloc.h>
#include <memory.h>

class Blanks
{
public:
    Blanks(){}
    void *operator new( size_t stAllocateBlock, char chInit );
};
void *Blanks::operator new( size_t stAllocateBlock, char chInit )
{
    void *pvTemp = malloc( stAllocateBlock );
    if( pvTemp != 0 )
        memset( pvTemp, chInit, stAllocateBlock );
    return pvTemp;
}
// For discrete objects of type Blanks, the global operator new function
// is hidden. Therefore, the following code allocates an object of type
// Blanks and initializes it to 0xa5
int main()
{
   Blanks *a5 = new(0xa5) Blanks;
   return a5 != 0;
}

El argumento proporcionado entre paréntesis a nuevo se pasa a Blanks::operator new como argumento de chInit .Sin embargo, se oculta la función global de operador nuevo , haciendo que el código como el siguiente genera un error:

Blanks *SomeBlanks = new Blanks;

En Visual C++ 5,0 y anterior, los tipos de los nonclass y todas las matrices (independientemente del número de clase escriba) asignados mediante el operador de nuevo utilizaban siempre la función global de operador nuevo .

A partir de Visual C++ 5,0, el compilador admite la matriz nuevo miembro y los operadores de cancelación en una declaración de clase.Por ejemplo:

// spec1_the_operator_new_function2.cpp
class MyClass
{
public:
   void * operator new[] (size_t)
   {
      return 0;
   }
   void   operator delete[] (void*)
   {
   }
};

int main() 
{
   MyClass *pMyClass = new MyClass[5];
   delete [] pMyClass;
}

Vea también

Referencia

función de operador delete

operador new (C++)

operador delete (C++)