Compartilhar via


operador new (<new>)

A função chamada por uma expressão com para atribuir o armazenamento para objetos individuais.

void* operator new( 
   std::size_t _Count 
) throw(bad_alloc); 
void* operator new( 
   std::size_t _Count,         
   const std::nothrow_t& 
) throw( ); 
void* operator new( 
   std::size_t _Count,  
   void* _Ptr 
) throw( );

Parâmetros

  • _Count
    O número de bytes de armazenamento a ser atribuído.

  • _Ptr
    O ponteiro a ser retornado.

Valor de retorno

Um ponteiro para o mais baixo endereço de bytes de armazenamento que acabaram de ser atribuído. Ou _Ptr.

Comentários

A primeira função for chamada por uma nova expressão para atribuir os bytes de _Count de armazenamento alinhados apropriadamente para representar qualquer objeto do tamanho. O programa poderá definir uma função de backup com a assinatura de função que substitui a versão padrão definida pela biblioteca padrão do C++ e então é substituível.

O comportamento é necessário retornar um ponteiro não nulo apenas se o armazenamento pode ser atribuído como solicitado. Cada uma dessas alocação gerencie um ponteiro para o armazenamento separa de qualquer outro armazenamento alocado. A ordem e a proximidade de armazenamento atribuídos por chamadas sucessivas não são especificados. O valor armazenado inicial não é especificado. Os pontos retornados do ponteiro no início (o mais baixo endereço de byte) de armazenamento alocado. Se o número for zero, o valor retornado não compara o igual a nenhum outro valor retornado pela função.

O comportamento padrão é executar um loop. Dentro do loop, a função tenta primeiramente atribuir o armazenamento solicitado. Se a tentativa envolve uma chamada a malloc(size_t) não é especificado. Se a tentativa for bem-sucedida, a função retorna um ponteiro para o armazenamento alocado. Caso contrário, as chamadas de função novo manipuladordesignado. Se a função retorna chamado, o loop repetirá. O loop termina quando uma tentativa de atribuir o armazenamento solicitado for bem-sucedida ou quando uma função chamada não retorna.

O comportamento de necessário um novo manipulador é executar uma das seguintes operações:

  • Fazer mais armazenamento disponível para a alocação e depois retornar.

  • Chame abort ou exit(int).

  • Gerencie um objeto do tipo bad_alloc.

O comportamento padrão de novo manipulador é gerar um objeto do tipo bad_alloc. Um ponteiro nulo designa o novo manipulador padrão.

A ordem e a proximidade de armazenamento atribuídos por chamadas sucessivas a operator new(size_t) não são especificados, como são os valores iniciais armazenados ali.

A segunda função for chamada por uma nova expressão de substituição para atribuir os bytes de _Count de armazenamento alinhados apropriadamente para representar qualquer objeto do tamanho. O programa poderá definir uma função de backup com a assinatura de função que substitui a versão padrão definida pela biblioteca padrão do C++ e então é substituível.

O comportamento padrão é retornar operator new(_Count) se a função tiver êxito. Caso contrário, retorna um ponteiro nulo.

A terceira função for chamada por uma expressão de new de posicionamento, de forma new (T)argumentos. Aqui, os argumentos consistem em um único ponteiro do objeto. Isso pode ser útil para construir um objeto em um endereço válido. A função retorna o _Ptr.

Ao armazenamento livre alocado por operator new, chame a exclusão do operador.

Para obter informações sobre o comportamento de reprodução ou nonthrowing de novo, consulte Operadores novos e exclusão.

Exemplo

// new_op_new.cpp
// compile with: /EHsc
#include<new>
#include<iostream>

using namespace std;

class MyClass 
{
public: 
   MyClass( )
   {
      cout << "Construction MyClass." << this << endl;
   };

   ~MyClass( )
   {
      imember = 0; cout << "Destructing MyClass." << this << endl;
   };
   int imember;
};

int main( ) 
{
   // The first form of new delete
   MyClass* fPtr = new MyClass;
   delete fPtr;

   // The second form of new delete
   MyClass* fPtr2 = new( nothrow ) MyClass;
   delete fPtr2;

   // The third form of new delete
   char x[sizeof( MyClass )];
   MyClass* fPtr3 = new( &x[0] ) MyClass;
   fPtr3 -> ~MyClass();
   cout << "The address of x[0] is : " << ( void* )&x[0] << endl;
}

Saída de exemplo

Construction MyClass.000B3F30
Destructing MyClass.000B3F30
Construction MyClass.000B3F30
Destructing MyClass.000B3F30
Construction MyClass.0023FC60
Destructing MyClass.0023FC60
The address of x[0] is : 0023FC60

Requisitos

Cabeçalho: <novo>

Namespace: std

Consulte também

Referência

novo operador (Exemplos da STL)

Estrutura nothrow_t

operador delete (<new>)