我找到了一段代码,其中包含 UB,并被告知将其保留在代码中,并附有说明它是 UB 的注释。仅使用 MSVC2012。
代码本身有一个原始Foo
对象数组,然后将该数组转换为char*
with reinterpret_cast<char*>
,然后在其上调用delete casted_array
(像这样,而不是 delete[])。
像这样:
Foo* foos = new Foo[500];
char* CastedFoos = reinterpret_cast<char*>(foos);
delete CastedFoos;
根据标准 5.3.5/3,这显然是未定义的行为。
显然,这段代码的作用是避免调用析构函数作为优化。
我想知道,实际上是否存在将 UB 留在代码中的地方可以被认为是有效的?
另外,就我而言,将上述内容留在代码中并不聪明,对吗?