c++ - 创建指针数组时 operator new[] 的语法

标签 c++ new-operator dynamic-arrays dynamic-allocation

我在创建指向 char 的指针数组时使用 new[] 运算符时遇到问题。由于 char* 是我希望我的元素属于的类型,因此我使用括号将其括起来,但它不起作用:

char **p = new (char *)[vector.size()];

但是当我去掉括号时它起作用了:

char **p = new char *[vector.size()];

为什么后一种有效?

最佳答案

char *p = new char[10]; 为大小为 10 个字符的数组动态分配一个内存块,并返回其第一个元素的地址,然后将其存储到 p (使 p 指向此内存块的开头)。

在这种情况下,new 关键字后跟数组类型说明符,您指定类型:
char **p = new char*[10]; - 在这种情况下,类型是 char*,而不是 (char*)。检查operator new[]

你可能对 C 风格的 malloc 语法感到困惑,它的返回值类型总是 void*,它可以被转换成不同的类型,这样你可以取消引用它。这就是您使用 (char*) 语法(C 风格类型转换)的情况:char *p = (char*) malloc(10);
尽管请注意,在 C 中,此转换是多余的:Do I cast the result of malloc?

请注意,使用 new[] 分配的内存应通过调用 delete[] 释放,而使用 malloc 分配的内存应为由 free 释放。

关于c++ - 创建指针数组时 operator new[] 的语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10795562/

相关文章:

c++ - 主函数外的新运算符 - C++

c++ - C++中动态数组的长度

c++使用匿名对象调用函数导致编译器错误

c++ - 如果内存不足抛出 Bad_alloc 异常

matlab - 在MATLAB中直接将大数组写入磁盘时,是否需要预先分配?

c++ - 使用 QXmlStreamReader 解析 XML

c++ - C 和 C++ 之间有什么区别禁止在后者中编译这个不拘一格的代码示例?

c++ - 在 C++ 中使用多个静态库解决冲突

c++ - 有没有办法强制cin提交?

c++ - STL Vectors 和 new 运算符