Compartilhar via


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çãoObservaçã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çãoObservaçã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.

Consulte também

Referência

novo operador (C++)