Inizializzazione degli oggetti allocati da l
un facoltativo inizializzatore il campo è incluso nella grammatica per nuovo operatore.In questo modo i nuovi oggetti da inizializzare con i costruttori definiti dall'utente.Per ulteriori informazioni su come l'inizializzazione viene effettuata, vedere inizializzatori.Nell'esempio seguente viene illustrato come utilizzare un'espressione di inizializzazione con nuovo operatore:
// 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 );
// ...
}
in questo esempio, l'oggetto CheckingAcct allocata tramite nuovo l'operatore, ma non inizializzazione predefinita è specificato.di conseguenza, il costruttore predefinito per la classe, Acct(), viene chiamato.Quindi l'oggetto SavingsAcct viene allocato nello stesso modo, con la differenza che in modo esplicito viene inizializzata su 34,98.Poiché 34,98 è di tipo doppio, il costruttore che accetta un argomento di tale tipo viene chiamato per gestire l'inizializzazione.Infine, il tipo di nonclass HowMuch viene inizializzato a 43,0.
Se un oggetto è del tipo di classe e la classe dispone di costruttori (come illustrato nell'esempio precedente), l'oggetto può essere inizializzato da nuovo operatore solo se una di queste condizioni:
Gli argomenti forniti in sono concordi con quelli di un costruttore.
La classe dispone di un costruttore predefinito che può essere chiamato senza argomenti).
Il controllo di ambiguità e di controllo di accesso viene eseguito su operator new e costruttori secondo le regole definite in ambiguità e Inizializzazione mediante le funzioni membro speciali.
Alcuna inizializzazione esplicita dell'per-elemento può essere eseguita quando alloca le matrici tramite nuovo operatore; solo il costruttore predefinito, se presente, viene chiamato.vedere Per impostazione predefinita gli argomenti per ulteriori informazioni.
Se l'allocazione della memoria non potesseoperator new restituisce un valore di 0), alcuna inizializzazione viene eseguita.In questo modo da tentativi di inizializzare i dati che non esiste.
Come con chiamate di funzione, l'ordine in cui è stato inizializzato le espressioni vengono valutate non è definito.Inoltre, non è necessario basare su queste espressioni completamente che vengono valutate prima dell'allocazione di memoria sia eseguita.Se l'allocazione della memoria ha esito negativo e nuovo l'operatore restituisce zero, alcune espressioni nell'inizializzatore non può essere completamente valutato.