次の方法で共有


new 演算子 (CRT)

ヒープからメモリ ブロックを割り当てます

void *__cdecl operator new(
   size_t count
);
void *__cdecl operator new(
   size_t count, 
   void * object
) throw();
void *__cdecl operator new(
   size_t count, 
   const std::nothrow_t&
) throw();

パラメーター

  • カウント
    割り当てサイズ。

  • object
    オブジェクトが作成されたメモリ ブロックへのポインター。

戻り値

新たに割り当てられるストレージの最下位バイト アドレスへのポインター。

解説

operator new ではベクターの新しい 新しい operator [] フォーム () とは対照的に新しいスカラーと呼びます。

この演算子は nonplacement の最初のフォームと呼ばれます。この演算子の 2 番目の形式は配置のフォームと呼ばれこの演算子の 3 番目の形式は nonthrowing の配置の形式です。

演算子の最初の形式はコンパイラによって定義されnew.h をプログラムに含まれる必要がありません。

operator newoperator delete で割り当てられたメモリを解放します。

新しい演算子かどうかの値を設定して null の場合は例外をスローします。詳細については新しいおよび削除の操作 を参照してください。

スローまたは非スロー動作を除きCRT operator new は標準 C++ ライブラリの new 演算子 のように動作します。

必要条件

ルーチン

必須ヘッダー

new

<new.h>

互換性の詳細については、「C ランタイム ライブラリ」の「互換性」を参照してください。

ライブラリ

C ランタイム ライブラリのすべてのバージョン。

使用例

次の例はスカラー operator new の nonplacement 形式を使用する方法を示します。

// crt_new1.cpp
#include <stdio.h>
int main() {
   int * i = new int(6);
   printf("%d\n", *i);
   delete i;
}

次の例はスカラー operator new の配置のフォームを使用する方法を示します。

// crt_new2.cpp
#include <stdio.h>
#include <new.h>
int main() {
   int * i = new int(12);
   printf("*i = %d\n", *i);
   // initialize existing memory (i) with, in this case, int(7)
   int * j = new(i) int(7);   // placement new
   printf("*j = %d\n", *j);
   printf("*i = %d\n", *i);
   delete i;   // or, could have deleted j
}

次に示すのはスカラー配置operator newthrow フォームを使用する方法を示します。

// crt_new3.cpp
#include <stdio.h>
#include <new.h>
int main() {
   // allocates memory, initialize (8) and if call fails, new returns null
   int * k = new(std::nothrow) int(8);   // placement new
   printf("%d\n", *k);
   delete k;
}

同等の .NET Framework 関数

該当なし標準 C 関数を呼び出すには、PInvoke を使用します。詳細については、「プラットフォーム呼び出しの例」を参照してください。

参照

関連項目

メモリ割り当て