Inicializando objetos alocados com novos
Um recurso opcional inicializador campo é incluído na gramática para o nova operador.Isso permite que novos objetos para ser inicializado com construtores definidos pelo usuário.Para obter mais informações sobre como é feita a inicialização, consulte inicializadores de.O exemplo a seguir ilustra como usar uma expressão de inicialização com o nova operador:
// expre_Initializing_Objects_Allocated_with_new.cpp
class Acct
{
public:
// Define default constructor and a constructor that accepts
// an initial balance.
Acct() { balance = 0.0; }
Acct( double init_balance ) { balance = init_balance; }
private:
double balance;
};
int main()
{
Acct *CheckingAcct = new Acct;
Acct *SavingsAcct = new Acct ( 34.98 );
double *HowMuch = new double ( 43.0 );
// ...
}
Neste exemplo, o objeto CheckingAcct é alocado usando o nova operador, mas nenhuma inicialização padrão é especificado.Portanto, o construtor padrão para a classe, Acct(), é chamado.Em seguida, o objeto SavingsAcct é alocada da mesma forma, exceto que ele explicitamente é inicializado para 34.98.Porque 34.98 é do tipo double, o construtor que leva um argumento desse tipo é chamado para manipular a inicialização.Finalmente, o tipo de nonclass HowMuch é inicializado para 43.0.
Se um objeto é de um tipo de classe, e essa classe tem construtores (como no exemplo anterior), o objeto pode ser inicializado pelo nova operador somente se uma das seguintes condições for atendida:
Os argumentos fornecidos no inicializador concordam com as de um construtor.
A classe tem um construtor padrão (um construtor que pode ser chamado sem argumentos).
Controle de acesso e controle de ambigüidade são executadas em operator new e os construtores de acordo com as regras definidas na ambigüidade e A funções de membro especial usando inicialização.
Nenhuma inicialização explícito por elemento pode ser feita quando alocando arrays usando o nova operador; somente o construtor padrão, se estiver presente, é chamado.Consulte Argumentos padrão para obter mais informações.
Se a alocação de memória falhar (operator new retorna um valor igual a 0), sem inicialização é executada.Isso protege contra tentativas de inicializar dados que não existem.
Assim como acontece com chamadas de função, a ordem na qual inicializadas expressões são avaliadas não está definida.Além disso, você não deve depender essas expressões completamente avaliados antes que a alocação de memória seja realizada.Se a alocação de memória falhar e o nova o operador retorna zero, algumas expressões do inicializador podem não ser completamente avaliados.