c++ - 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;
。
解决方案
就我而言,您应该使用delete[] arr
. 否则您可能会收到编译器警告 C4208。
使用 Microsoft 扩展
/Ze
,您可以使用带有删除运算符的括号内的值删除数组。该值被忽略。这些值在 ANSI 兼容性下无效/Za
。
如果你尝试使用/Za
,你会得到Compiler Error C2203。
有关更多详细信息,我建议您可以参考链接: C++ 数组删除运算符语法
推荐阅读
- haskell - 无法将类型“[Char]”与 spa 的“Char”匹配
- vue.js - 无法获取日期范围选择器(Vuejs)的值
- r - 如何将键/图例组织到 ggplot 的类别中
- jmeter - 如何在 jmeter 脚本记录器的“要包含的 URL 模式”中正确匹配您自己的域
- php - 在 WooCommerce 中将产品变体的自定义字段值显示到自定义产品选项卡
- python - 如何在 Mac 上的 Jupyter 中链接 NLTK?
- android - 将视频上传到 Youtube 会在中间停止。(不崩溃) - Android10
- python-3.x - 终端linux运行python代码的问题:模块keras.backend没有属性get_session
- ios - iOS:企业构建,使用 Fastlane 支持无线安装
- amazon-web-services - 为所有 SAAS 客户升级产品