首页 > 解决方案 > delete[something] 在 Visual Studio 中有什么作用?

问题描述

我知道 C++ 标准不允许这样做,并且它不能在 gcc 上编译,但我想知道为什么它可以在 Visual Studio 中工作。

#include <iostream>

struct A
{
    A()
    {
        std::cout << "A()" << std::endl;
    }
    ~A()
    {
        std::cout << "~A()" << std::endl;
    }
};

int main()
{
    int n;
    std::cin >> n;
    A* arr = new A[n];
    delete[n] arr;
}

它的行为与delete[] arr;, delete[n+5] arr;,delete[n/2] arr;delete[-54] arr;even相同delete[A{}] arr;

标签: c++visual-studio

解决方案


就我而言,您应该使用delete[] arr. 否则您可能会收到编译器警告 C4208

使用 Microsoft 扩展 /Ze,您可以使用带有删除运算符的括号内的值删除数组。该值被忽略。这些值在 ANSI 兼容性下无效 /Za

如果你尝试使用/Za,你会得到Compiler Error C2203

有关更多详细信息,我建议您可以参考链接: C++ 数组删除运算符语法


推荐阅读