delete []的行为(ptr,0)

use*_*147 6 c++ pointers delete-operator

是否定义了此代码的行为?

int* ptr = new int[10];
operator delete[] (ptr, 0);
Run Code Online (Sandbox Code Playgroud)

这段代码可以正常编译,并且(在我的机器上)似乎什么也没有发生。它的行为在某处定义吗?

Vla*_*cow 0

在这份声明中

operator delete[] (ptr, 0);
Run Code Online (Sandbox Code Playgroud)

显式调用了释放函数

void operator delete[](void*, std::size_t) noexcept;
Run Code Online (Sandbox Code Playgroud)

调用中具有该类型的第二个参数size_t仅设置为 0。

如果分配的内存大小不等于 0,则第二个参数等于 0 的调用行为是未定义的。

  • 是接线员的电话吗?它不是逗号运算符,而是运算符的参数。 (2认同)
  • 那将是“delete[](ptr, 0)”(没有“operator”关键字)。现在OP直接调用操作函数。 (2认同)
  • @VladfromMoscow 这并没有更好。没有逗号运算符。`f(1, 2)` 不等于 `f(2)`。这里的“f”是“运算符delete[]”。 (2认同)