Partager via


Initialisation d'objets alloués avec nouveau

Un champ facultatif d'initialiseur est inclus dans la syntaxe de l'opérateur de nouveau .Cela permet de nouveaux objets à initialiser avec les constructeurs définis par l'utilisateur.Pour plus d'informations sur la façon dont l'initialisation est terminée, consultez l' initialiseurs.l'exemple suivant montre comment utiliser une expression d'initialisation avec l'opérateur de nouveau :

// 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 );
    // ...
}

Dans cet exemple, l'objet CheckingAcct est alloué à l'aide de l'opérateur nouveau , mais aucune initialisation par défaut n'est spécifiée.par conséquent, le constructeur par défaut pour la classe, Acct(), est appelé.L'objet SavingsAcct est alloué la même façon, mais il est initialisé explicitement à 34,98.Étant donné que 34,98 est de type double, le constructeur qui prend un argument de ce type est appelé pour traiter l'initialisation.Enfin, le type sans classe HowMuch est initialisé à 43,0.

Si un objet est d'un type de classe et cette classe a des constructeurs (comme dans l'exemple précédent), l'objet peut être initialisé par l'opérateur de nouveau uniquement si une des conditions suivantes est remplie :

  • Les arguments fournis dans l'initialiseur est conforme à celles d'un constructeur.

  • La classe contient un constructeur par défaut (un constructeur pouvant être appelé sans argument).

le contrôle de contrôle d'accès et d'ambiguïté sont exécutés sur operator new et sur les constructeurs selon les règles déterminez dans ambiguïté et Initialisation à l'aide de les fonctions membres spéciales.

Aucune initialisation explicite de cours ne peut être effectuée en allouant les tableaux à l'aide de l'opérateur nouveau ; uniquement le constructeur par défaut, le cas échéant, est appelé.Consultez l' arguments par défaut pour plus d'informations.

Si l'allocation de mémoire échoue (operator new retourne une valeur de 0), aucune initialisation n'est effectuée.Cela empêché la modification des tentatives d'initialiser les données qui n'existe pas.

Comme avec les appels de fonction, l'ordre dans lequel est lancé les expressions sont évaluées n'est pas définies.En outre, vous ne devez pas compter sur ces expressions qui est complètement évaluées avant l'allocation de mémoire soit exécutée.Si l'allocation de mémoire échoue et l'opérateur de nouveau retourne zéro, certaines expressions dans l'initialiseur ne peuvent être entièrement évaluées.

Voir aussi

Référence

l'opérateur new (C++)