Freigeben über


Die Objekte initialisieren zugeordnet mit neuem

Ein optionales Feld Initialisierer wird in der Grammatik für den neu-Operator enthalten.Dadurch werden die neuen mit benutzerdefinierten Konstruktoren zu initialisierenden Objekte.Weitere Informationen darüber, wie die Initialisierung abgeschlossen ist, finden Sie unter Initialisierung.Das folgende Beispiel veranschaulicht, wie Sie einen Initialisierungsausdruck mit dem neu-Operator verwendet:

// 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 diesem Beispiel wird das Objekt CheckingAcct mithilfe des Operators neu zugeordnet, aber keine Standardinitialisierung zugewiesen wird.Daher ist der Standardkonstruktor für die Klasse, Acct(), aufgerufen.Anschließend wird das Objekt auf die gleiche Weise SavingsAcct zugeordnet, mit der Ausnahme, dass sie explizit wird mit 34.98 initialisiert.Da 34.98 vom Typ doubleist, wird der Konstruktor, der ein Argument akzeptiert dieses Typs aufgerufen, um die Initialisierung zu bearbeiten.Schließlich wird der Nicht-Klassen-Typ HowMuch mit 43.0 initialisiert.

Wenn ein Objekt von einem Klassentyp ist und diese Klasse Konstruktoren (wie im vorhergehenden Beispiel) aufweist, kann das Objekt aus dem neu-Operator initialisiert werden, wenn nur eine dieser Bedingungen erfüllt ist:

  • Die Argumente, die im Initialisierer bereitgestellt werden, stimmen mit denen eines Konstruktors überein.

  • Die Klasse verfügt über einen Standardkonstruktor (ein Konstruktor ohne Argumente aufgerufen werden kann).

Zugriffssteuerung und Mehrdeutigkeits die Steuerung werden auf operator new ausgeführt und auf den Konstruktoren nach den Regeln legen Sie in Mehrdeutigkeit und Initialisierung Sie mit speziellen Memberfunktionenfest.

Nicht explizite Initialisierung pro Element kann geschehen, wenn sie Arrays mithilfe des Operators neu zuordnet. Nur der Standardkonstruktor, wenn vorhanden, wird aufgerufen.Weitere Informationen finden Sie unter Standardargumente .

Wenn die Speicherbelegung (operator new gibt den Wert 0 (null) zurück, fehlschlägt, wird keine Initialisierung ausgeführt.Dies schützt vor Versucht, Daten zu initialisieren, die nicht vorhanden ist.

Wie bei Funktionsaufrufen, in denen die Reihenfolge initialisiert wurde, werden Begriffe definiert nicht ausgewertet.Darüber hinaus sollten Sie nicht auf diese Ausdrücke erstellen, die vollständig ausgewertet werden, bevor die Speicherbelegung ausgeführt wird.Wenn die Speicherbelegung fehlschlägt und der neu-Operator (null) zurückgibt, werden einige Ausdrücke im Initialisierer nicht vollständig ausgewertet werden.

Siehe auch

Referenz

new-Operator (C++)