次の方法で共有


新しいどのように作業

代入式 の演算子を含む式 新規作成 — 3 は三つのことを実行します :

  • 割り当てられるオブジェクト用のストレージを探し予約します。この段階が完了すると適切な量のストレージを割り当てますがまだオブジェクトではない。

  • オブジェクトを初期化します。初期化が終わったら十分な情報がオブジェクトに割り当てられたストレージに現在です。

  • 新しい型の名前 または の名前から派生した型のオブジェクトへのポインターを返します。プログラムで割り当てられたオブジェクトを最近アクセスするにはこのポインターを使用します。

新規作成 の演算子は operator new 関数を呼び出します。のすべての型の配列と クラス structまたは 共用体 型ではなくストレージを割り当てるためにオブジェクトグローバル関数**:: new 演算子** で呼び出されます。クラス型のオブジェクトはクラスごとに operator new の静的メンバー関数を定義できます。

型 type のオブジェクトを割り当てる場合はコンパイラが 新規作成 の演算子が発生したときにユーザー定義の operator new が定義されていない場合 type**:: 新しい演算子 ((sizeof** type)) または**:: 新しい演算子 ((sizeof** type)) の呼び出しを生成します。したがって 新規作成 の演算子はオブジェクトの正しいメモリの量を割り当てることができます。

[!メモ]

operator new への引数は型 size_t です。この型は MEMORY.H DIRECT.HMALLOC.HSEARCH.H STDDEF.HSTDIO.HSTDLIB.Hおよび STRING.H TIME.H. で定義されます。

文法のオプションは 配置 の指定ができます (new 演算子 についてはのリファレンスを参照してください。 配置の パラメーターは operator new のユーザー定義の実装にのみ使用できます。; は追加情報が operator new に渡すことができます。T *TObject = new (0x0040) T; などの 配置の フィールドを含む式はT *TObject = ::operator new(sizeof(T), 0x0040); への T *TObject = T::operator new(sizeof(T), 0x0040); に他のクラスの情報に新しいメンバー演算子が変換されます。

配置の フィールドの元の目的はハードウェアに依存しないオブジェクトにユーザーが指定したアドレスに割り当てられるようにすることでした。

[!メモ]

前の例の 配置の フィールドに 1 個の引数だけを示していますが余分な引数が何 operator new このようにして渡すことができるかに制限はありません。

operator new がクラス型に対して定義された場合でもグローバル演算子はこの例のフォームを使用しては使用できません :

T *TObject =::new TObject;

新規作成 のグローバル演算子のスコープ解決演算子 ():: を強制的に使用します。

参照

関連項目

新しい演算子 (C++)