Compartilhar via


operator new[] (<new>)

A função de alocação chamada por uma nova expressão para atribuir o armazenamento para uma matriz de objetos.

void *operator new[]( 
   std::size_t _Count 
) 
   throw(std::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 ao objeto da matriz.

  • _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 expressão de new[] para atribuir os bytes de _Count de armazenamento alinhados apropriadamente para representar qualquer objeto da matriz desse tamanho ou menor. O programa poderá definir uma função com a assinatura de função que substitui a versão padrão definida pela biblioteca padrão do C++. O comportamento necessário é o mesmo de operador novo(size_t). O comportamento padrão é retornar operator new(_Count).

A segunda função for chamada por uma expressão de new[] de posicionamento para atribuir os bytes de _Count de armazenamento alinhados apropriadamente para representar qualquer objeto da matriz desse tamanho. O programa poderá definir uma função com a assinatura de função que substitui a versão padrão definida pela biblioteca padrão do C++. 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[args]N. Aqui, os argumentos consistem em um único ponteiro do objeto. A função retorna _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_alloc.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[2];
   delete[ ] fPtr;

   // The second form of new delete
   char x[2 * sizeof( MyClass ) + sizeof(int)];
   
   MyClass* fPtr2 = new( &x[0] ) MyClass[2];
   fPtr2[1].~MyClass();
   fPtr2[0].~MyClass();
   cout << "The address of x[0] is : " << ( void* )&x[0] << endl;

   // The third form of new delete
   MyClass* fPtr3 = new( nothrow ) MyClass[2];
   delete[ ] fPtr3;
}

Saída de Exemplo

Construction MyClass.00311AEC
Construction MyClass.00311AF0
Destructing MyClass.00311AF0
Destructing MyClass.00311AEC
Construction MyClass.0012FED4
Construction MyClass.0012FED8
Destructing MyClass.0012FED8
Destructing MyClass.0012FED4
The address of x[0] is : 0012FED0
Construction MyClass.00311AEC
Construction MyClass.00311AF0
Destructing MyClass.00311AF0
Destructing MyClass.00311AEC

Requisitos

Cabeçalho: <novo>

Namespace: std

Consulte também

Referência

Estrutura nothrow_t

operador delete[] (<new>)