我可以像下面的代码一样使用smth吗:
int main()
{
int* foo = new int;
double* bar = reinterpret_cast<double*>(foo);
delete bar;
}是UB吗?
我认为我们只需要为new返回的指针调用delete操作符,但在这种情况下强制转换又如何呢?
我认为它是UB,因为reinterpret_cast不会对结果指针提供任何保证。我说的对吗?
有没有人能贴出标准中的正确引述?
发布于 2013-06-24 19:28:12
§5.3.5/2“在第一种选择(delete对象)中,delete操作数的值可以是空指针值,指向由先前new表达式创建的非数组对象的指针,或指向表示此类对象基类的子对象(1.8)的指针(第10条)。如果不是,则行为未定义。”因为bar指向一个double,所以它不指向由前一个new-expression (创建了一个int)创建的对象。
https://stackoverflow.com/questions/17274236
复制相似问题