次の方法で共有


new の機能

allocation-expression (new 演算子を含む式) は次の 3 つの処理を行います。

  • 割り当てられるオブジェクトのストレージを探し、予約します。 この段階が完了すると、適切なサイズのストレージが割り当てられます。ただし、まだオブジェクトではありません。

  • オブジェクトを初期化します。 初期化が完了すると、割り当てられたストレージをオブジェクトにするための十分な情報が得られます。

  • new-type-name または type-name から派生したポインター型のオブジェクトへのポインターを返します。 プログラムでは、このポインターを使用して新しく割り当てられたオブジェクトにアクセスします。

new 演算子は operator new 関数を呼び出します。 任意の型の配列の場合、または class 型、struct 型、union 型ではないオブジェクトの場合、::operator new グローバル関数を呼び出してストレージを割り当てます。 クラス型オブジェクトは、クラスごとに異なる operator new 静的メンバー関数を定義できます。

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

注意

operator new の引数は size_t 型です。この型は、DIRECT.H、MALLOC.H、MEMORY.H、SEARCH.H、STDDEF.H、STDIO.H、STDLIB.H、STRING.H、および TIME.H で定義されます。

必要であれば placement も指定できます (new 演算子の文法を参照してください)。 placement パラメーターは operator new のユーザー定義の実装にのみ使用できます。これは、追加情報が operator new に渡されることを許可します。 T *TObject = new ( 0x0040 ) T; のように placement フィールドが指定された式は、クラス T がメンバー演算子 new を持つ場合は T *TObject = T::operator new( sizeof( T ), 0x0040 ); に変換されます。その以外の場合は T *TObject = ::operator new( sizeof( T ), 0x0040 ); に変換されます。

placement フィールドの本来の目的は、ハードウェアに依存するオブジェクトをユーザー指定のアドレスに割り当てられるようにすることです。

注意

前の例では placement フィールドに引数を 1 つだけ指定しましたが、この方法で operator new に渡すことができる引数の数に制限はありません。

operator new がクラス型に対して定義されている場合でも、次の形式でグローバル演算子を使用できます。

T *TObject =::new TObject;

スコープ解決演算子 (::) を使用する場合は、グローバルの new 演算子を使用する必要があります。

参照

関連項目

new 演算子 (C++)