我可以像下面的代码一样使用smth:
int main()
{
int* foo = new int;
double* bar = reinterpret_cast<double*>(foo);
delete bar;
}
Run Code Online (Sandbox Code Playgroud)
是UB吗?
我认为我们只需要为operator new返回的指针调用operator delete,但是在这种情况下怎么样?
我认为它是UB,因为reinterpret_cast不会对结果指针提供任何保证.我对吗?
有人可以从标准中发布正确的报价吗?
§5.3.5/ 2"在第一个备选(删除对象)中,delete的操作数的值可以是空指针值,指向前一个新表达式创建的非数组对象的指针,或指向表示这种对象的基类的子对象(1.8)(第10条).如果没有,则行为未定义." 由于
bar指向a double,它不指向由前一个new-expression(创建一个int)创建的对象.