我可以从new []

时间:2018-02-16 17:19:13

标签: c++ arrays dynamic-arrays

我的班级成员声明为:char (*buf)[]。据我所知,这是一个指向未定义维度的字符数组的指针。在我的逻辑中,我想为这个数组动态分配内存:

buf = new char[100];

但是new返回char *,所以编译器抱怨

 error: assigning to 'char (*)[]' from incompatible type 'char *'

有没有办法将此指针存储在指向char数组的指针中?如果没有,那么能够像我上面那样声明指针的用途是什么?

我认为如果我可以存储数组指针会很有用,如果我调用delete(没有[]),编译器会警告我。

2 个答案:

答案 0 :(得分:1)

你可以用演员来做你想做的事情:

char (*buf)[];
buf = (char (*)[])new char[100];

(*buf)[0] = 5; // Assignment

//delete buf; <- compiler warning
delete[] buf;

答案 1 :(得分:1)

在标准中,buf是“指向未知的char数组的指针”。您无法为其分配new-expression的结果(因为您无法动态分配未知边界的数组)。

如果数组是二维的,您可以将动态分配的内存分配给“指向char数组的指针”,例如char (*ptr)[2] = new char [100][2]

标准组中有open issue与此相关。如果该建议被采纳,则不会允许您的帖子中的示例,但它将允许char (*ptr)[] = new char [100][2]