Share via


新しいによって割り当てられたオブジェクトの初期化

省略可能な 初期化子の フィールドは 新規作成 演算子の文法に含まれます。その結果新しいオブジェクトがユーザー定義のコンストラクターで初期化されます。詳細については初期化の実行方法初期化子 を参照してください。次の例に 新規作成 の演算子に初期化子式を使用する方法を示しています :

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

この例ではオブジェクト CheckingAcct は 新規作成 の演算子を使用して割り当てられますが既定の初期化が指定されていません。したがってクラスAcct() の既定のコンストラクターで呼び出されます。このオブジェクト SavingsAcct は同じようにより34.98 に明示的に初期化します。34.98 の型であるため 倍精度浮動小数点型 初期化を処理するにはその型の引数を受け取るコンストラクターが呼び出されます。最後にnonclass の型 HowMuch は 43.0 に初期化されます。

オブジェクトをクラス型でありそのクラスにコンストラクター (前の例のように) の場合オブジェクトは 新規作成 の演算子によってこれらの条件の 1 つが満たされるとしか初期化できません :

  • 初期化子で指定した引数はコンストラクターのパラメーターと一致します。

  • クラスの既定のコンストラクター (引数なしで呼び出すことができるコンストラクター) があります。

アクセス制御とあいまいさがコントロールは operator new で実行され規則に従ってコンストラクターで あいまいさ特殊なメンバー関数を使用して初期化されます。 でにします。

明示的な初期化は要素ごとの配列を 新規作成 の演算子を使用して割り当てるとできません ; 既定のコンストラクターだけある場合にが呼び出されます。詳細については既定の引数 を参照してください。

メモリ割り当て (operator new は値 0 を返します) 失敗した場合は初期化は行われません。保護データを初期化しように対してこの。

順序が初期化関数呼び出しと同様に式が定義されていません評価されます。さらにメモリの割り当てが実行される前にこれらの下に評価される式に依存しないようにしてください。メモリの割り当てと 新規作成 の演算子は失敗した場合は初期化子の一部の式は完全に評価されない場合があります。

参照

関連項目

新しい演算子 (C++)