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 do armazenamento a ser atribuído para o objeto de matriz._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 expressão de new[] para atribuir os bytes de _Count de armazenamento alinhados corretamente para representar qualquer objeto matriz do tamanho ou menor.O programa pode definir uma função com essa assinatura de função que substitui a versão padrão definido pela biblioteca do C++ padrão.O comportamento necessário é o mesmo que para operador novosize_t().O comportamento padrão é retornar operator new_Count().
A segunda função é chamada por uma expressão de new[] de posicionamento para atribuir os bytes de _Count de armazenamento alinhados corretamente para representar qualquer objeto matriz de esse tamanho.O programa pode definir uma função com essa assinatura de função que substitui a versão padrão definido pela biblioteca do C++ padrão.O comportamento padrão é retornar operatornew()_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 (args) TN[].Aqui, os args consistem em um único ponteiro do objeto.a função retorna _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_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;
}
A 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: <new>
namespace: STD