2017-09-23 39 views
0

C++中这三行之间的区别是什么?单个变量和数组的动态指针分配有什么区别?

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

我们已经宣布动态存储器的指针变量p,它为什么需要具体提及指针数组的大小?

+0

最后一个错误是:在']'标记之前期望的初级表达式 int * p = new int []; –

回答

2
int *p = new int; 

这为int类型的单个对象分配足够的内存和存储在指向它的指针的指针TO- int可变p。这意味着*p指的是有效的int对象。

int *p = new int[10]; 

这为int类型的10个对象分配足够的连续存储器和指针TO- 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 []'在释放底层内存块之前知道有多少对象需要破坏(如果需要的话)。 –

相关问题