2017-09-23 2 views
0

C++のこれら3つの行の違いは何ですか?1つの変数と配列に対する動的ポインタ割り当ての違いは何ですか?

int *p= new int; 
int *p= new int[10]; 
int *p = new int[]; 

我々はすでに、動的にそれが特異的ポインタ配列のサイズを言及することが必要である理由を、変数pをポインタにメモリを宣言していますか?

+0

最後の1つはエラーです: ']'トークンの前に期待されるprimary-expression int * p = new int []; –

答えて

2
int *p = new int; 

これはタイプintの単一目的のために十分なメモリを割り当て、ポインタツーint可変pでそれへのポインタを格納します。これは、*pが有効なintオブジェクトを参照していることを意味します。

int *p = new int[10]; 

これはタイプintの10個のオブジェクトのための十分な連続したメモリを割り当て、ポインタツーint可変pで最初intへのポインタを格納します。つまり、p[0]p[9]は有効なintオブジェクトを参照しています。

int *p = new int[]; 

この文は構文的に正しくありません。これは有効なC++ではないため、意味を持ちません。

... why is it required to specifically mention pointer array size?

は、他にどのようにメモリアロケータは、あなたがのための部屋を必要とするどのように多くのintのことを教えていない場合は割り当てにどのくらいのメモリを知っていることになっていますか?

+2

また、単一オブジェクトの 'new'は単一オブジェクトの' delete'とマッチしなければならず、配列の 'new []'は配列の 'delete []'とマッチしなければならないことに注意してください。 'new []'は、 'delete []'が、(必要ならば)いくつのオブジェクトを破壊して、下にあるメモリブロックを解放するかを知るように配列数を格納します。 –

関連する問題