Compartilhar via


operator new (<new>)

A função chamada por uma expressão recentemente 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 seja atribuído.

  • _Ptr
    o ponteiro a ser retornado.

Valor de retorno

Um ponteiro para o menor endereço de bytes de armazenamento recentemente atribuído.Ou _Ptr.

Comentários

A primeira função é chamada por uma nova expressão para atribuir os bytes de _Count de armazenamento alinhados corretamente para representar qualquer objeto do tamanho.O programa pode definir uma função alternativo com essa assinatura de função que substitui a versão padrão definido pela biblioteca do C++ padrão e portanto é substituível.

O comportamento é necessário retornar um ponteiro nonnull somente se o armazenamento pode ser atribuído como solicitado.Cada tal alocação produz um ponteiro para o armazenamento separada de qualquer outro armazenamento atribuído.A ordem e a contiguidade de armazenamento atribuídos por chamadas sucessivas são não especificado.O valor inicial armazenado não é especificado.Os pontos retornados do ponteiro para o início (o menor endereço de bytes) de armazenamento atribuído.Se o número for zero, o valor retornado não compara igual a nenhum outro valor retornado pela função.

o comportamento padrão é executar um loop.Dentro do loop, a função primeiro tenta atribuir o armazenamento aplicativo.Se a tentativa envolve uma chamada para malloc(size_t) não é especificado.Se a tentativa é bem-sucedida, a função retorna um ponteiro para o armazenamento atribuído.Caso contrário, as chamadas de função novo manipuladordesignado.Se a função chamada retorna, as repetições do loop.O loop termina quando tentar atribuir o armazenamento aplicativo for bem-sucedida ou quando uma função chamada retorna.

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

  • Faça mais armazenamento disponível para a alocação e retornar em.

  • Chame abort ou exitint().

  • Lançe um objeto do tipo bad_alloc.

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

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

A segunda função é chamada por uma nova expressão de posicionamento para atribuir os bytes de _Count de armazenamento alinhados corretamente para representar qualquer objeto do tamanho.O programa pode definir uma função alternativo com essa assinatura de função que substitui a versão padrão definido pela biblioteca do C++ padrão e portanto é substituível.

O comportamento padrão é retornar operator new()_Countse essa função êxito.Caso contrário, retornará um ponteiro nulo.

A terceira função é chamada por uma expressão de new de posicionamento, do formulário new (T).args.Aqui, os args consistem em um único ponteiro do objeto.Isso pode ser útil para construir um objeto em um endereço conhecido.a função retorna o _Ptr.

Para armazenamento livre atribuído por operator new, chamada supressão de operador.

Para obter informações sobre o comportamento de jogo ou nonthrowing de novo, consulte Os novos operadores e delete.

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

A 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: <new>

namespace: STD

Consulte também

Referência

new operator (STL Samples)

nothrow_t Structure

operator delete (<new>)