Compartilhar via


operador nova função

Quando uma instrução, como a seguir é encontrada em um programa, ele se traduz em uma chamada à função operator new:

Comentários

char *pch = new char[BUFFER_SIZE];

Se a solicitação for para zero bytes de armazenamento, novo operador retorna um ponteiro para um objeto diferentes (ou seja, repetidas chamadas para novo operador retornam ponteiros diferentes).Se não houver memória suficiente para a solicitação de alocação, novo operador retorna Nulo ou lança uma exceção (consulte o novo e excluir os operadores de para obter mais informações).

Você pode escrever uma rotina que tenta liberar memória e tente novamente a alocação; consulte _set_new_handler para obter mais informações.Para obter mais detalhes sobre o esquema de recuperação, consulte o tópico a seguir, De manipulação de condições de memória insuficiente.

Os dois escopos para operator new funções são descritas na tabela a seguir.

O escopo para o operador novas funções

Operador

Escopo

:: novo operador

Global

nome da classe:: novo operador

Classe

O primeiro argumento para novo operador deve ser do tipo size_t (um tipo definido no STDDEF.H) e o tipo de retorno é sempre void *.

O modelo global da novo operador função é chamada quando o nova é usado para alocar os objetos dos tipos internos, objetos do tipo de classe que não contenham user-defined novo operador funções e matrizes de qualquer tipo.Quando o nova é usado para alocar os objetos de um tipo de classe onde uma novo operador for definido, dessa classe novo operador é chamado.

Um novo operador função definida para uma classe é uma função de membro estático (que não pode, portanto, ser virtual) que oculta o global novo operador função para objetos desse tipo de classe.Considere o caso em que nova é usado para alocar e definir a memória para um determinado valor:

// 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;
}

O argumento fornecido entre parênteses nova é passado para Blanks::operator new como o chInit argumento.No entanto, o global novo operador função estiver oculta, fazendo com que o código como o seguinte para gerar um erro:

Blanks *SomeBlanks = new Blanks;

Em tipos do Visual C++ 5.0 e versões anteriores, nonclass e todos os arrays (independentemente se eles eram de classe tipo) alocado usando o nova operador usado global sempre novo operador função.

Começando com Visual C++ 5.0, o compilador suporta matriz de membro nova e Excluir operadores em uma declaração de classe.Por exemplo:

// 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;
}

Consulte também

Referência

Função de operador delete

novo operador (C++)

Excluir operador (C++)