相关疑难解决方法(0)

新char [n]和new(char [n])之间的差异

有什么区别new char[n]new (char[n])

我在生成的代码中有第二种情况,g ++(4.8.0)给了我

ISO C++ does not support variable-length array types [-Wvla]
Run Code Online (Sandbox Code Playgroud)

这让我想到这两者是否相同.

  1. new char[n]意思是"分配n类型的对象char.
  2. 是否new (char[n])意味着"分配1个类型的对象array of n chars"?
  3. 删除第一个很清楚.
  4. 我应该用delete或删除第二个delete[]
  5. 我应该注意哪些其他差异?
  6. 我可以安全地删除括号并将第二种情况转换为第一种情况,当软件的其他部分期望第二种情况时?

代码由第三方软件生成(并由软件的其他部分使用),因此我不能只是"使用向量".

这是最小的例子:

int main (void)
{
    int n(10);
    int *arr = new (int[n]); // removing parentheses fixes warning
    *arr = 0; // no "unused variable" warning
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ memory-management

23
推荐指数
2
解决办法
1470
查看次数

为什么'new int (*)[10]'错误?

我尝试了这段代码:

auto p = new int (*)[10];
Run Code Online (Sandbox Code Playgroud)

但我收到错误消息:

test.cc:8:21: error: expected expression
        auto p = new int (*)[10];
                           ^
1 error generated.
Run Code Online (Sandbox Code Playgroud)

我改变了我的代码:

typedef int array[10];
auto p = new array *;
Run Code Online (Sandbox Code Playgroud)

然后一切都很顺利。为什么是这样?

c++ new-operator multidimensional-array

12
推荐指数
1
解决办法
802
查看次数