Funciona como nova
O alocação-expressão — a expressão que contém o nova operador — faz três coisas:
Localiza e reserva-se o armazenamento para um ou mais objetos a ser alocada.Quando essa etapa estiver concluída, a quantidade correta de armazenamento é alocada, mas ainda não é um objeto.
Inicializa o objeto (s).Depois que a inicialização estiver concluída, a informação suficiente está presente para o armazenamento alocado seja um objeto.
Retorna um ponteiro para o objeto (s) de um tipo de ponteiro é derivado de nome de tipo novo ou nome do tipo.O programa usa esse ponteiro para acessar o objeto recém-alocado.
O nova operador invoca a função operator new.Matrizes de qualquer tipo e para os objetos que não são do classe, struct, ou união tipos, uma função global, :: novo operador, é chamado para alocar o armazenamento.Objetos do tipo de classe podem definir seus próprios operator new a função de membro estático em uma base por classe.
Quando o compilador encontra o nova operador para alocar um objeto do tipo type, ele emite uma chamada para type**:: novo operador (sizeof (type))** ou, se não definida pelo usuário operator new for definido, :: novo operador (sizeof (type)). Portanto, o nova operador pode alocar a quantidade correta de memória para o objeto.
Observação |
---|
O argumento para operator new é do tipo size_t.Esse tipo é definido no direta.H, MALLOC.H, A MEMÓRIA.H, A PESQUISA.H, STDDEF.H, STDIO.H, STDLIB.H, A SEQÜÊNCIA DE CARACTERES.H e tempo.H. |
Uma opção na gramática permite a especificação de posicionamento (consulte a gramática para operador new).O posicionamento parâmetro pode ser usado somente para implementações definida pelo usuário do operator new; Ele permite que informações extras a serem passados ao operator new.Uma expressão com um posicionamento campo, como T *TObject = new ( 0x0040 ) T; é traduzido como T *TObject = T::operator new( sizeof( T ), 0x0040 ); se a classe t tem operador de membro novo, caso contrário, a T *TObject = ::operator new( sizeof( T ), 0x0040 );.
A intenção original do posicionamento campo era permitir que objetos dependentes de hardware a ser alocada em endereços especificados pelo usuário.
Observação |
---|
Embora o exemplo anterior mostra apenas um argumento na posicionamento campo, não há nenhuma restrição de quantos argumentos extras podem ser passados para operator new dessa maneira. |
Mesmo quando operator new foi definido para um tipo de classe, o operador global pode ser usado com o formulário deste exemplo:
T *TObject =::new TObject;
O operador de escopo de resolução (::) força o uso do modelo global da nova operador.