【问题标题】:g++ gives warning for deleting an array for one code but not the otherg++ 警告删除一个代码的数组而不是另一个
【发布时间】:2020-06-13 08:06:25
【问题描述】:

我来自 Java 背景,但仍然对指针和其他东西的工作方式感到困惑。我有两个例子。

int arr[10] = {};
delete[] arr;

在这里,我的编译器会发出关于删除 arr 的警告。

int *arr = new int[4];
delete[] arr;

但它不会在这里发出警告?这是为什么呢?

【问题讨论】:

  • 每个new 都有一个对应的delete。没有new -> 没有delete
  • 因为在第二种情况下您正确使用了delete[]。简单地说,如果你使用new[],那么在某些时候你需要使用delete[]。 BTW 'throw' 在 C++ 中具有特定的含义(与异常有关)。编译器不会抛出警告。

标签: c++ arrays delete-operator


【解决方案1】:

在您的第一个代码中,arr 是静态分配的(在堆栈上),并且会在超出范围时自动释放。对静态分配的变量调用 delete[] 毫无意义。

在您的第二个代码中,arr 是在堆上动态分配的,并且在超出范围时不会自动被释放,因此需要对其调用 delete[]。 p>

在此处获取有关正确使用删除的更多信息:C++ and when to use delete

【讨论】:

    猜你喜欢
    • 2020-12-15
    • 1970-01-01
    • 2021-07-27
    • 1970-01-01
    • 2013-08-15
    • 2022-01-03
    • 2018-12-14
    • 1970-01-01
    • 2013-02-19
    相关资源
    最近更新 更多