この質問は、同様の質問に触発されました: delete[] はオペランド配列のサイズをどのように「認識」しますか?
私の質問は少し異なります: プログラムで C++ 配列のサイズを決定する方法はありますか? そうでない場合、なぜですか? 配列を取るすべての関数は、サイズを指定するために整数パラメーターも必要とします。しかし、リンクされた質問が指摘したように、delete[]
割り当てを解除するメモリのサイズを知っている必要があります。
次の C++ コードを検討してください。
int* arr = new int[256];
printf("Size of arr: %d\n", sizeof(arr));
これSize of arr: 4
は、ポインターのサイズである " " を出力します。256 を出力する関数があればいいのですが、C++ には存在しないと思います。(繰り返しますが、問題の一部は、なぜそれが存在しないのかということです。)
明確化int arr[256];
: ヒープ (つまり " ") ではなくスタックで配列を宣言すると、sizeof
演算子は 1024 (配列の長さ * sizeof(int)) を返すことを知っています。