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();
パラメーター
count
割り当てのサイズ。object
オブジェクトが作成されたメモリ ブロックへのポインター。
戻り値
新しく割り当てられたストレージの最下位バイト アドレスへのポインター。
解説
operator new のこのフォームはスカラー new フォーム (新しい演算子) とは対照的に、新しいベクターと呼ばれます。
この演算子の最初のフォームは nonplacement のフォームと呼ばれます。 この演算子の 2 番目のフォームは、配置のフォームと呼ばれ、この演算子の 3 番目のフォームは nonthrowing 配置のフォームです。
演算子の最初のフォームはコンパイラによって定義され、new.h をプログラムに含まれる必要がありません。
[]演算子の削除 は 新しい演算子で割り当てられたメモリを解放します。
operator new[] が null を返すか、またはエラーが発生した場合は例外をスローするかどうかを設定できます。 詳細については、「new および delete 演算子」を参照してください。
スローするか、非スローする動作を除き、CRT operator new は、標準 C++ ライブラリの 新しい演算子[] と同様に動作します。
必要条件
ルーチン |
必須ヘッダー |
---|---|
new[] |
<new.h> |
互換性の詳細については、「C ランタイム ライブラリ」の「互換性」を参照してください。
ライブラリ
C ランタイム ライブラリのすべてのバージョン。
使用例
次に示すのは、operator newベクターの nonplacement のフォームを使用する方法を示します。
// crt_new4.cpp
#include <stdio.h>
int main() {
int * k = new int[10];
k[0] = 21;
printf("%d\n", k[0]);
delete [] k;
}
次に示すのは、ベクター operator newの配置のフォームを使用する方法を示します。
// crt_new5.cpp
#include <stdio.h>
#include <new.h>
int main() {
int * i = new int[10];
i[0] = 21;
printf("%d\n", i[0]);
// initialize existing memory (i) with, in this case, int[[10]
int * j = new(i) int[10]; // placement vector new
printf("%d\n", j[0]);
j[0] = 22;
printf("%d\n", i[0]);
delete [] i; // or, could have deleted [] j
}
次に示すベクター、配置、operator newの非スローのフォームを使用する方法を示します。
// crt_new6.cpp
#include <stdio.h>
#include <new.h>
int main() {
int * k = new(std::nothrow) int[10];
k[0] = 21;
printf("%d\n", k[0]);
delete [] k;
}